历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2018年09月16日 | stm32f2xx与stm32f10x在正交编码器应用定时器初始化中的区别

2018-09-16 来源:eefocus

注意:


如果stm32f2xx系列上面的网址的代码要做适当修改。


以下说重点:stm32f2xx系列,在调试中对GPIO的初始化,切记选择GPIO_Mode_AF模式,即端口复用。


随后,要做端口映射处理,即调用:GPIO_PinAFConfig()函数。


这2个方式不选择,timer是不会有反应的




本人是stm32f207,花了4天惨痛代价。


以下贴代码:


 

 

 

/* Private define ------------------------------------------------------------*/

#define ENCODER_TIMER                TIM3  // Encoder unit connected to TIM3

#define ENCODER_PPR           (u16)(1000)   // number of pulses per revolution

#define SPEED_BUFFER_SIZE               8

 

#define COUNTER_RESET   (u16)10

#define ICx_FILTER      (u8) 6 // 6<-> 670nsec

 

#define TIMx_PRE_EMPTION_PRIORITY 0x0F

#define TIMx_SUB_PRIORITY 0x0F

 

 

 

*******************************************************************************

* Function Name  : ENC_Init

* Description    : General Purpose Timer x set-up for encoder speed/position 

*                  sensors

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void Encoder_Init(void)

{

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  TIM_ICInitTypeDef TIM_ICInitStructure;

  

/* Encoder unit connected to TIM3, 4X mode */    

  GPIO_InitTypeDef GPIO_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;

  

  /* TIM3 clock source enable */

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* Enable GPIOC, clock */

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

  //GPIO_Init

  GPIO_StructInit(&GPIO_InitStructure);

  /* Configure PC.06,07 as encoder input */

  GPIO_InitStructure.GPIO_Pin = INTA_PIN | INTB_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //这个地方注意

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

 

   /* Connect TIM3 pins to AF2 */  

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);   //这个地方注意

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);   //这个地方注意

 

  

  /* Enable the TIM3 Update Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

 

  /* Timer configuration in Encoder mode */

  TIM_DeInit(ENCODER_TIMER);

  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

  

  TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling 

  TIM_TimeBaseStructure.TIM_Period = 0x0F;//(4*ENCODER_PPR)-1;  

  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   

  TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);

 

  TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI1, 

                             TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);

  TIM_ICStructInit(&TIM_ICInitStructure);

  TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER; //--?--

  TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);

  

 // Clear all pending interrupts

  TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);

  TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);

  //Reset counter

  //ENCODER_TIMER->CNT = COUNTER_RESET;

  

  ENC_Clear_Speed_Buffer();

  

  TIM_Cmd(ENCODER_TIMER, ENABLE);  

}

 

/*******************************************************************************

* Function Name  : TIM3_IRQHandler

* Description    : This function handles TIMx Update interrupt request.

                   Encoder unit connected to TIM3

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void TIM3_IRQHandler(void)

{  

    /* Clear the interrupt pending flag */

    TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);

 


推荐阅读

史海拾趣

Cembre SPA公司的发展小趣事

Cembre SPA一直秉持品质至上的原则,不断追求产品质量的提升。公司建立了严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都严格把控。同时,公司还注重持续改进,通过引入先进的生产设备和技术,不断提高生产效率和产品质量。

Connect-Tech Products Corp公司的发展小趣事

Connect-Tech Products Corp公司始终将产品质量视为企业发展的生命线。公司建立了严格的质量管理体系,从原材料采购、生产加工到产品出厂,每一个环节都严格把控。此外,公司还注重持续改进,不断优化生产流程和技术创新,确保产品质量的稳定性和可靠性。这些措施使得Connect-Tech Products Corp公司的产品在市场上赢得了良好的口碑和信誉。

DeLorme公司的发展小趣事

作为一家有着高度社会责任感的企业,DeLorme公司始终关注环境保护和社会公益事业。他们积极参与各种环保活动和社会公益活动,通过捐赠物资、提供技术支持等方式为社会做出贡献。此外,他们还致力于推动公司的可持续发展战略,通过优化生产工艺、降低能耗和减少废弃物排放等措施降低对环境的影响。这些举措不仅体现了公司的社会责任感也提高了公司的品牌形象和市场竞争力。

请注意,以上故事均为虚构内容,旨在为你提供一个关于DeLorme公司发展起来的可能故事框架。在实际情况中,DeLorme公司的发展历程和具体故事可能会有所不同。

Cal-Chip Electronics公司的发展小趣事

Cal-Chip Electronics公司的创始人[创始人姓名]在XXXX年怀揣着对电子技术的热爱和对市场需求的敏锐洞察,决定创立这家公司。初期,公司面临着资金短缺、人才匮乏和技术难题等多重挑战。然而,[创始人姓名]凭借坚定的信念和不懈的努力,成功吸引了第一批投资者,并组建了一支由行业精英组成的核心团队。通过不断的技术研发和市场调研,公司逐渐在半导体芯片领域站稳了脚跟。

Equator Technologies公司的发展小趣事

在发展过程中,Equator始终注重拓展国际市场。通过与全球各地的合作伙伴建立紧密的合作关系,Equator将其产品和服务推向了世界各地。特别是在亚洲市场,Equator凭借其卓越的技术实力和优质的产品赢得了众多客户的青睐。同时,公司还积极参加国际展会和交流活动,与全球同行进行技术交流和合作,不断提升自身的国际竞争力。

Alps Alpine Co Ltd公司的发展小趣事

在发展过程中,Equator始终注重拓展国际市场。通过与全球各地的合作伙伴建立紧密的合作关系,Equator将其产品和服务推向了世界各地。特别是在亚洲市场,Equator凭借其卓越的技术实力和优质的产品赢得了众多客户的青睐。同时,公司还积极参加国际展会和交流活动,与全球同行进行技术交流和合作,不断提升自身的国际竞争力。

问答坊 | AI 解惑

uboot怎么引导内核

之前编译uboot通过了才发现是交叉编译器出现问题还好算是过去,开始引导内核了。看了一下uboot的代码没有关于nand flash分区的信息,不知道该把内核映像下载到哪里。想问一下 uboot是不是没有分区信息吗,我用的是1.2.0的上面没有mtdparts的命令不 ...…

查看全部问答>

4511译码器 中的一些问题!

最近做了一个抢答器的设计,但中间有些问题弄不明白啊!知道咱们论坛里的高手多,特此来请教! 4511 后面需要连接一个七段显示器,这两个之间应该需要一个电阻的吧?需要一个多大的电阻呢? 4511连接的七段显示器能够显示0~9 ,但我只需要1~8 , ...…

查看全部问答>

第一次测试串口通讯问题.有好些疑问

# include # define BYTE unsigned char # define WORD unsigned int BYTE idata txdata[7]={\"ABCDEF\"}; sbit  P15=P1^5 ;//蜂鸣器 void main() {    BYTE h;    WORD k;    P15 = 0x00;// ...…

查看全部问答>

随谈

      原来没有接触过触摸板,正好借此机会体验一下触摸板和低功耗。因为没有之前也没有用过430的单片机,所以也没啥心得,发帖就为能够争取个    TI MSP-EXP430FR5739实验板套件  430单片机到手后主 ...…

查看全部问答>

拒绝忽悠 移动GPU全解读(二)

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 说说被忽略的Shader接下来我们回到Shader。Shader是GPU里负责计算的主要部分,同时占得面积最大,耗电也最多。当今的桌面GPU往往都不再谈三角形生成率,或是像素填充率了,给的指标都是Shader ...…

查看全部问答>

电脑监控仪

电脑监测仪主要是为了保护电脑用户的眼镜。现在人们的生活越来越离不开电脑,比如那些整天坐在电脑前做软件开发,研发工作,或其他工作的人,电脑对他们眼镜的伤害可想而知。所以为了保护广大电脑用户的眼镜,希望能开发出一种产品来给电脑用户带来 ...…

查看全部问答>

单片机学习

单片机的种类很多,想请教一下对于即将毕业的大学生,想从事这方面的工作,是需要学习那几种单片机呢?目前只学习了51,52,msp430的,请问有必要再学习其他的吗,还是把这几种学精就好呢    谢谢各位了 …

查看全部问答>

R7F0C802x Easy Start --串口开发小计

      串口是基本的通讯端口,基本上每个嵌入式处理都自带了至少一个串口了,R7F0C802x当然也不例外。本来以为R7F0C802x的串口是挺简单的东西,看来是太轻敌了,前前后后共花了一周的时间才把它搞定。下面就来总结一下R7F0C802 ...…

查看全部问答>

看看烧毁的LM2596

今天单位返修了几个设备,全部是LM2596烧毁 这个烧毁的最厉害 这个好一些 这个倒是没有烧,直接掉了一个腿 大家一块分析一下烧毁的原因,看芯片的标识是国半的,采购的价格是7块多,也像是真的。TI官网上的资料写的正常工作电压是40V ...…

查看全部问答>

ST F7大赛~智能小区控制系统~μCOSIII移植二

本帖最后由 abofly 于 2015-11-2 19:57 编辑 上一篇的工程未开启FPU,μCOS为最新最新版本,但是后期开启FPU一直出现问题,后改用3.3版本官方例程的FPU入栈方案不符合入栈顺序且造成易造成堆栈空间浪费, 本工程采用了安富莱V5开发板F4的入栈方 ...…

查看全部问答>