网站首页 > 技术文章 正文
在进行程序编写的时候,调试信息很重要。除了通过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”需要根据发送的字节长度去调整。如果太小,会导致数据无法全部发送。
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 stm32F0 串口的几个特殊功能 stm32f1串口引脚
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
- 2024-10-12 STM32F103编程学习——串口接收不定长数据
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)