计算机系统应用教程网站

网站首页 > 技术文章 正文

STM32F4入坑日记——串口发送数据(非中断)

btikc 2024-10-12 11:45:39 技术文章 9 ℃ 0 评论

在进行程序编写的时候,调试信息很重要。除了通过Debug来查看程序是否按照我们的设想执行之外,还可以通过串口打印来进行监控程序走向。

所以,为了接下来能更好的入坑STM32F4,今天先把串口的发送程序跑起来。其实,用了CubeMX之后,真的很简便。

查看原理图,调试串口使用的是串口1,为了能直观的看到板子上的现象这里把LED灯也驱动起来。

新建CubeMX工程,配置GPIO、时钟、工程配置就不再上图 ,如果刚兴趣的话可以看看我的另外一篇日记“STM32F4入坑日记——闪烁的LED”。

配置完之后生成对应的mdk工程。在上一篇日记,我们用的是HAL_Delay()函数来进行延时,以达到LED隔一段时间变换一次状态的目的,这种在代码量很小的情况下就可以用到,毕竟此函数是让单片机一直等待,直到延时时间到(如下图),此期间,单片机除了中断服务函数之外,无法执行其他任务。

所以今天,我们采取另外一种方法来实现这个“延时”功能。

定义一个全局变量TIME_FLAG_STRUCT sysTimeFlag,下面修改中断服务函数SysTick_Handler,每当定时时间到,则将对应标志位置位,在主函数轮询标志位。标志位置位则执行相对应的代码。PS:CubeMX默认配置系统滴答定时器的中断频率为1000Hz,即1ms中断一次。

回到主题——串口发送,这次我们使用的是非中断的方式,只需要用到一个函数。HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);

在main.c函数中添加如下内容,即可。

完成之后,编译下载程序。即可看到LED以10Hz的频率闪烁,串口每1S发送一次字符串"Hello STM32F417 \r\n"。

注意使用HAL_UART_Transmit函数时,最后一个参数“Timeout”需要根据发送的字节长度去调整。如果太小,会导致数据无法全部发送。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表