freertos韦东山--旋转编码器
·

按照这个思路去完成和红外一样,不同的地方是rotary_task里,读队列B,处理数据,写队列A,的程序编写。
创建静态队列记得第四个参数static StaticQueue_t 没有*
大条了,想加个旋转编码器硬件,但是在cubemx一添加新的管脚,重新生成代码就会导致原来的代码不能运行,一动编码器屏幕就会卡住。
我是个大傻x,旋转编码器读完队列,本应该然后再写红外队列,写进旋转队列,给自己一耳光
还有记得在f103-it.c里把相关的回调函数写进去,中断才能运行,需要用户自己添加
void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
IRReceiver_IRQ_Callback();
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
/* USER CODE END EXTI9_5_IRQn 1 */
}
/**
* @brief This function handles TIM4 global interrupt.
*/
void TIM4_IRQHandler(void)
{
/* USER CODE BEGIN TIM4_IRQn 0 */
/* USER CODE END TIM4_IRQn 0 */
HAL_TIM_IRQHandler(&htim4);
/* USER CODE BEGIN TIM4_IRQn 1 */
/* USER CODE END TIM4_IRQn 1 */
}
/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
RotaryEncoder_IRQ_Callback();
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
/* USER CODE END EXTI15_10_IRQn 1 */
}
后面的所谓解耦,就是定义其他的变量,left right none (1 2 3)作为最终给系统运行的变量,其他的都是中间量,
红外改造就是把红外接收的里面根据接收到的红外键值设置idata_val为1,2还是3,,读的时候就读是1,2还是3,后面根据这个123来动作,其实这都是已经写好的,只是从括号里拿出来了而已
旋转编码器改造就是判断方向的地方,从设置left的为红外键码值改为设置123
更多推荐
所有评论(0)