芯片型号:STM32F103RE操作系统:FREERTOS 问题描述: 1.编码器计数时,硬件计数器记满一个周期(目前设置为10),会在TIM2中产生一个中断,进行进位 2.实现方式,先获取了硬件定时器中的数,再获取周期中的数,返回两者相加的值。计数值函数如下:
解决方案: 1.不使用中断而改用查询的方式(因为这是公司的框架,希望尽量少的改动代码) 2.考虑使用临界区保护。但发现freertos中临界区的优先级比TIM2低,无法挂起中断 3.考虑使用STM32自带的中断挂起函数void NVIC_SetPendingIRQ (IRQn_t IRQn) ,但目前发现该函数操作的寄存器ISPR虽然是32位,但赋值时只能使用16位,无法挂起该中断(TIM2为28) 关于挂起中断,void NVIC_SetPendingIRQ (IRQn_t IRQn)
希望各位大大帮忙给下建议 |
å®æ¹ç¼ç¨æåä¸å ³äºISPRå¯åå¨ç说æ
ä¸æåå¼å¸¸åé1
ä¸æåå¼å¸¸åé2
评分
查看全部评分
评分
查看全部评分
之后就忙新的案子去了,也不再捣鼓这问题了!~
在获取硬件读数值后,TIM_GetCounter((TIM_TypeDef*)_timer->getTimx())
对该值做处理,如果<9,数值按正常累加。
如果>9数值先加9,再累加,不就可以了吗?
评分
查看全部评分
评分
查看全部评分
1、读取计数之前关中断,读取结束再打开
2、先读取十位,再读取硬件的个位
if (个位 < 5)
{
重新读取一次十位;
}