正在测试一个代码,
PC6是LED灯,通过定时器4捕获霍尔元件的输入信号,如果进入中断则灯亮。
但是不知道为什么进不去,配置如下,大佬解析一下
- void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
- {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
- }
复制代码
- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_TIM4_Init();
- while (1)
- {}
- }
复制代码
在while前加了
- HAL_TIM_IC_Start(&htim4, TIM_CHANNEL_1 | TIM_CHANNEL_2 | TIM_CHANNEL_3 | TIM_CHANNEL_4);
- HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1 | TIM_CHANNEL_2 | TIM_CHANNEL_3 | TIM_CHANNEL_4);
复制代码还是不行
现在是我用霍尔信号驱动(直接是电机上的霍尔元件没接上拉,不确定这里要不要接)不会产生中断,然后用一个飞线+5V输入到通道4就会产生中断。(中间4个为定时器4的1—4通道,下面的是那个设置的要点亮的灯)。所以是没接上拉电阻的问题吗?有没有不接上拉电阻的方式可以驱动。
调试界面检查寄存器
飞线加个上拉电阻试试呗
重新配置了霍尔元件接口,使用CubeMX中定时器的XOR/Hall Sensor Mode, 然后做了以下初始化,
- void HallInit(void)
- {
- if(HAL_TIMEx_HallSensor_Start(&htim4)!= HAL_OK)
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
- //HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1|TIM_CHANNEL_2|TIM_CHANNEL_3);
- HAL_TIMEx_HallSensor_Start_IT(&htim4);
- }
复制代码在捕获中断里产生了LED等的取反操作,然而如果是初始化捕获中断(在初始化中标注的句子)就无法产生中断。
- void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
- {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, 1-HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_7));
- }
复制代码不清楚是不是HAL库的什么设定。
之前卡在这里几天就是上面那个初始化的问题,初始化了霍尔接口没有初始化其中断,感谢大佬了。
这个带霍尔元件的电机驱动我做完了做个大的总结。
一周热门 更多>