stm32f072(stm32f030c8t6)

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

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

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

stm32f072(stm32f030c8t6)

STM32F417最小系统

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

stm32f072(stm32f030c8t6)

CubeMX配置

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

stm32f072(stm32f030c8t6)

HAL_Delay函数体

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

stm32f072(stm32f030c8t6)

用于时间分片结构体

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

stm32f072(stm32f030c8t6)

SysTick_Handler中断服务函数

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

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

stm32f072(stm32f030c8t6)

定义发送字符串

stm32f072(stm32f030c8t6)

主函数添加内容

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

stm32f072(stm32f030c8t6)

串口助手

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

创业项目群,学习操作 18个小项目,添加 微信:8070109525  备注:小项目

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 554234155@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.lebaoshun.com/2773.html