龙空技术网

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

VanChe 878

前言:

现在各位老铁们对“stm32f4单片机上网”可能比较珍视,同学们都想要剖析一些“stm32f4单片机上网”的相关资讯。那么小编也在网上搜集了一些关于“stm32f4单片机上网””的相关资讯,希望咱们能喜欢,兄弟们一起来学习一下吧!

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

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

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

STM32F417最小系统

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

CubeMX配置

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

HAL_Delay函数体

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

用于时间分片结构体

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

SysTick_Handler中断服务函数

回到主题——串口发送,这次我们使用的是非中断的方式,只需要用到一个函数。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”需要根据发送的字节长度去调整。如果太小,会导致数据无法全部发送。

标签: #stm32f4单片机上网