自从ST推出了cubeMX工具以后,开发STM32系列的项目就变得非常简单了。
以串口为例,只需要简单配置一下串口的属性,然后自动生成项目代码,就可以直接发送数据了。
串口属性中NVIC中需要enable串口中断,这样可以实现高效串口收发。
PERIPHERALS MODES FUNCTIONS PINS
SYS Serial Wire SYS_JTCK-SWCLK PA14
SYS Serial Wire SYS_JTMS-SWDIO PA13
SYS SysTick SYS_VS_Systick VP_SYS_VS_Systick
USART1 Asynchronous USART1_RX PA10
USART1 Asynchronous USART1_TX PA9
Pin Nb PINs FUNCTIONs LABELs
21 PA5 GPIO_Output
42 PA9 USART1_TX
43 PA10 USART1_RX
46 PA13 SYS_JTMS-SWDIO
49 PA14 SYS_JTCK-SWCLK
不过配置好的项目代码在需要接收的场合使用并不太完善。但是通过阅读配置好的代码发现,示例代码提供了__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart),既然是__weak,那就是我们可以重写这个函数,类似于C++的重载特性。所以只需要重构一下void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)这个回调函数,每次有接收中断产生后,程序就会自动调用这个回调函数。
所以我们只需要在这个回调函数中保存好接收的数据到接收缓冲区就能实现串口接收功能。
另外,在main函数增加接收数据结束判断UART1_ReceiveCHK(),以时间间隔大于30mS为结束条件,这样就可以实现完整的收发功能了。(当然,也可以参照AT命令的\R\N来判断结束,缺点是无法实现任意数据收发。)
int main(void){
while

3730

被折叠的 条评论
为什么被折叠?



