DEBUG:STM32F1ZET6在Cubemx下编码器无法使用
注:
- 不建议使用cubemx,尤其做一些复杂点的项目
- 我只是调好一部分bug,有时候要看一下源码,看不懂就调不了,因为hal网上资料比较少,大部分都是标准库的,虽然目前已经停止更新了。
- hal一直想要兼容性,但是32兼容性基本上就是一个芯片一套写法。
优点
- 但是那个图形化的配置参数真心赞。
缺点
- 出bug是真心难调
核心
启动函数,cubemx最大的优点就是节能,不加个启动函数,它真的不会启动,用爱发电系列。
注
- 启动函数有差别,以定时器为例,不同定时器会有差别。
- 是否中断也会有差别。
MX_GPIO_Init();
MX_TIM8_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_TIM4_Init();
MX_TIM5_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim3);
HAL_TIM_Base_Start(&htim4);
HAL_TIM_Base_Start(&htim5);
HAL_TIM_Base_Start(&htim8);
HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_4);
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(&htim5, TIM_CHANNEL_ALL); 、
原理就是 TIM2 3 4 5读编码器 TIM6进行中断运算PID,TIM8输出PWM
编码器读取举例:
这是使用的是增量法,适合防止丢步。
case 2: enc= (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2)); __HAL_TIM_SET_COUNTER(&htim2,0); break;