**问题描述:**rt thread studio中调用HAL_UART_Receive_IT或HAL_TIM_Base_Start_IT等函数开启外设中断,进入死循环b Infinite_Loop
问题原因:
没有编写中断服务函数,如TIM7_IRQHandler USART2_IRQHandler,所以会进入“Default_Handler”默认服务函数中死循环
使用cubemx+keil开发裸机项目时,cubemx会根据配置自动生成相应的中断服务函数,并放置在stm32f1xx_it.c文件中。
但是,当我们使用rt thread studio联合cubemx开发时,stm32f1xx_it.c不会参加编译,因为rt thread会重写一套相关的中断服务函数,并放置在相应的drv文件中
比如usart放置在drv_usart.c中,如果要使用这里的中断服务函数,需要去board.h中定义串口,然后将里面的uart_isr()函数屏蔽掉,换成自己的中断回调函数。
解决办法:
首先,选择你的开发方式,如果是rt thread驱动开发,那么按照手册进行开发即可,不会出现上述问题
如果需要使用HAL库开发,
打开stm32f4x_it.h头文件,查看函数名,然后点击跳转到定义的地方,也就是drv文件里面
如drv_hwtimer.c、drv_usart.c中然后自己定义中断回调函数
将里面的中断回调函数换成HAL库函数
这里有个前提是,你要在board.h中定义BSP_USING_TIM7,如果是串口中断的话,也需要去定义BSP_UART
否则这一块会是灰色的
如果不想去board.h中定义定时器和串口
可以新建一个.c源文件,将stm32f1xx_it.c中要用到的中断服务函数复制过去即可