【嵌入式系统开发11】串口通讯“小试牛刀”——完成一个STM32的USART串口通讯程序

本文目的是主要介绍通过STM32F103C8T6完成一个STM32的USART串口通讯程序,在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。


前言

※ stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库进行点亮流水灯,可参考博主的博客:https://blog.csdn.net/qq_52199251/article/details/127274537
※ 本文主要讲解如何完成一个STM32的USART串口通讯程序;在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。

(一)需求分析

※ 完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
※ 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

(二)环境预置

1.硬件工具

STM32F103C8T6 , USB转TTL,面包板 ,还有部分 杜邦线
● 当然还有必要的PC端以及相应的驱动配置。
请添加图片描述

2.软件配置

2.1 STM32cubeMX

STM32CubeMX 是被广泛使用的。它集成了芯片选型、引脚分配和功能配置,中间件配置,时钟配置,初始代码和项目的功能。其中 STM32CubeMX STM32Cubeprogrammer ,除了对所有STM32芯片系列,和所有应用的通用支持之外,还有一些对特定应用的支持,比如STM32Cube.AI就是基于STM32CubeMX的插件功能,来把训练好的模型部署到STM32上;还比如在安全固件升级和安全固件安装,即SBSFU和SFI操作里, STM32CubeProgrammer 就启动了代码加密,HSM实例化等功能。STM32支持丰富的开源和ST自主知识产权中间件,比如来自开源社区的FreeRTOS,FatFS,mbedTLS;ST自己的USB主机和设备协议栈,TouchGFX等。
在这里插入图片描述

关于STM32CubeMX介绍及安装参考博主:https://blog.csdn.net/qq_44629109/article/details/126299438

2.2 Keil

keil安装
链接:https://pan.baidu.com/s/1ttrDhv6kXgAvPiYINf9iGw
提取码:1234
通过以上链接下载mdk和注册器,点击安装mdk,根据提示自行更改软件路径和支持包路径,填写完注册信息后NEXT,等待安装。安装完成,点击Finish。
注册
链接:https://pan.baidu.com/s/1T11pBKpD6xc-cNmXBskcaw
提取码:1234
支持包安装
链接:https://pan.baidu.com/s/1a7UDSVeLC4ktHNN9lV9oIA
提取码:1234
点击运行下载的支持包,NEXT开始安装,安装完成,点击Finish。


(三)工程创建

1.串口通讯工程新创

● 点击ACCESS TO MCU SELECTOR在这里插入图片描述
● 找到自己所用的芯片型号,并进行建立。
在这里插入图片描述

2.工程参数配置

● Mode选择异步通信(Asynchronous)。
在这里插入图片描述
●波特率为115200,1位停止位,无校验位(这里不需要改,默认就是这样)。
在这里插入图片描述
在这里插入图片描述

3.配置项目设置

在这里插入图片描述
最后生成项目即可。
在这里插入图片描述


(四)Keil编译程序以及Hex文件的生成

1.新建工程

● 用keil打开刚刚在CubeMX生成的项目文件。
在这里插入图片描述

2.代码编写

● 在main.c文件中补充代码。
.在main.c中定义STM32需要给上位机发送的消息

	uint8_t hello[20]="hello world\n";

在这里插入图片描述
在main.c中定义一个延时函数,来使设置发送的时间间隔:

void  Delay_wxc( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}

在这里插入图片描述
.在while循环中调用查询,并调用延时函数

 while (1)
  {
		
			HAL_UART_Transmit(&huart1,hello,20,100000);
			Delay_wxc(3500); //这里每个人电脑不一样发送的间隔时延需要自己调整尝试
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

在这里插入图片描述

3.编译文件

在这里插入图片描述
在这里插入图片描述


(五)烧录硬件实现

1.打开FlyMcu

● 编译发现没有报错,进行烧录实现。
在这里插入图片描述

2.开发板boot0置1,boot1置0

● 这里需要对STM32F103C8T6进行按键预置。
请添加图片描述

3.开发板boot0和boot1都置0

● 按下复位监控,并且打开串口助手,查看环境是否配置正确。
在这里插入图片描述

4.实现效果

最总我们实现了非常好的效果,成功实现了接收信号
请添加图片描述


(六)虚拟逻辑分析仪仿真观察

1.前置设备

● 首先打开魔法棒,进行修改参数。
在这里插入图片描述
● 修改一下相应参数。
在这里插入图片描述
● 记得打开Keil自带的仿真模拟器。
在这里插入图片描述
在这里插入图片描述

2.进入DEBUG观察

● 点击Setup进行修改相应参数。
在这里插入图片描述● 设置为bit流
在这里插入图片描述

3.观察波形并总结

●可以得到如下波形。
请添加图片描述

●放大后进行观看,高电平持续实际时间为6us:
在这里插入图片描述
●同理可以观察低电平持续时间为86us:
在这里插入图片描述


(七)总结

本文介绍了如何在嵌入式系中通过STM32F103C8T6完成一个STM32的USART串口通讯程序,在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。
寄语:鹏铭
   我真的真的真的很想告诉你
   你需要的不是优秀,不是金榜题名,不是年入百万。
   而且是你和母亲相守的小幸福啊!!!!!


(八)参考文献

https://blog.csdn.net/zhoushuaiyxlmwan/article/details/127327982
https://blog.csdn.net/qq_53112972/article/details/127332400

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值