stm32编码器模式

我最近有一个项目要利用stm32的编码器模式计数,我很苦恼,我想用原子的寄存器设置模式,库函数的我没有很好的接触,我自己也配置了,可是lcd上始终显示不到数字,这是库函数的程序:voidENC_Init(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_ICInitTypeDefTIM_ICInitStructure;GPIO_InitTypeDefGPIO_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APBPeriph_ENCODER_TIMER,ENABLE);//ENCODER_TIMER时钟初始化RCC_APB2PeriphClockCmd(RCC_APBPeriph_ENCODER_GPIO,ENABLE);//ENCODER_GPIO时钟初始化GPIO_StructInit(&GPIO_InitStructure);//TI1TI2初始化GPIO_InitStructure.GPIO_Pin=ENCODER_TI1|ENCODER_TI2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(ENCODER_GPIO,&GPIO_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=TIMER_IRQChannel;//设置ENCODER_TIMER的优先级NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=TIMx_PRE_EMPTION_PRIORITY;NVIC_InitStructure.NVIC_IRQChannelSubPriority=TIMx_SUB_PRIORITY;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);/*TimerconfigurationinEncodermode*///设置ENCODER_TIMER为编码器模式TIM_DeInit(ENCODER_TIMER);//ENCODER_TIMER复位TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);TIM_TimeBaseStructure.TIM_Prescaler=0x0;//无分频TIM_TimeBaseStructure.TIM_Period=(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_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);//编码器接口初始化//TIM_ICPolarity_Rising:TIM输入捕获上升沿TIM_ICStructInit(&TIM_ICInitStructure);TIM_ICInitStructure.TIM_ICFilter=ICx_FILTER;//TIM_ICFilter选择输入比较滤波器。该参数取值在0x0和0xF之间TIM_ICInit(ENCODER_TIMER,&TIM_ICInitStructure);//ClearallpendinginterruptsTIM_ClearFlag(ENCODER_TIMER,TIM_FLAG_Update);//清除TIMx的待处理标志位TIM_ITConfig(ENCODER_TIMER,TIM_IT_Update,ENABLE);//使能或者失能指定的TIM中断//ResetcounterTIM2->CNT=COUNTER_RESET;TIM_Cmd(ENCODER_TIMER,ENABLE);//使能或者失能TIMx外设}//****************************************************************************************************//计算马达转子相对于初始位置的角度-180至+180//****************************************************************************************************voidENC_Get_Electrical_Angle(uint16_t*degree){int32_ttemp;int16_ttim_count;tim_count=TIM_GetCounter(ENCODER_TIMER);//获取ENCODER_TIMER的值if(tim_count>=400)//如果超过180度,角度为负数{degree[0]='-';degree[1]=(800-tim_count)*180/(4*ENCODER_PPR/2);//整数部分temp=(int32_t)(800-tim_count)*(int32_t)(1000000/(4*ENCODER_PPR/2))*360-degree[1]*1000000;degree[2]=(unsignedchar)temp;//小数部分}else//如果未超过180度,角度为正数{degree[0]='+';degree[1]=tim_count*180/(4*ENCODER_PPR/2);//整数部分temp=(int32_t)tim_count*(int32_t)(1000000/(4*ENCODER_PPR/2))*180-degree[1]*1000000;degree[2]=(unsignedchar)temp;//小数部分}}//****************************************************************************************************//TIm2_IRQ计算编码器每秒钟产生的脉冲数//**************************************************************************************************voidTim2_IRQ(void){unsignedinttemp;if(Count[0]==0){Count[0]++;//以便下次读取并计算C...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?