重庆交通大学信息科学与工程学院
《嵌入式系统基础A》课程
作业报告(实验一)
班 级: 物联网工程2002
姓名-学号 : 吴泽霖-632007060217
实验项目名称: 串口通信小试
实验项目性质: 设计性
实验所属课程: 《嵌入式系统基础》
实验室(中心): 南岸校区语音大楼
指 导 教 师 : 娄路
完成时间: 2022 年 10 月 21 日
一、实验内容和任务
串口通信小试
二、实验要求
1. 分组要求:每个学生独立完成,即1人1组。
2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。
3.项目代码上传github,同时把项目完整打包为zip文件,与实验报告(Markdown源码及PDF文件)、作业博客地址一起提交到学习通。
三. 实验过程介绍
一、基于HAL库的LED流水灯
新建项目
回到STMCubeMX的主界面,创建新项目:
在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:
点击system core,进入SYS,在debug下选择serial wire:
配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里:
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
将hse那里设为Crystal/Ceramic Resonator
接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15:
点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM:
进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
二、打开.uvprojx文件
将原主函数处覆盖图中代码
电路连接
根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9
总电路:
红——B9
绿——C15
黄——A4
烧录运行
三、完成一个STM32的USART串口通讯程序
创建项目并配置
Rcc配置
USART1配置配置项目名、项目存放路径、使用编辑器、HAL库所使用的版本:
Code Generate配置:
生成并打开项目
代码编写
在main.c的while循环上面写入以下代码:
char data[] = "\nHello world!\n";
在while循环中写入以下代码
HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xFFFF);
HAL_Delay(1000);
编译并烧录到板子中打开串口调试助手,开启串口
四、观察GPIO端口的输出波形
Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。Debug页的设置:
选择逻辑分析仪:
观察波形
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。
五、总结
在本次串口通信实验中,我本来打算使用汇编代码来实现串口通信功能,却发现在串口调试中出现的是乱码,经过在询问后,可能是因为汇编代码本身的bug,而后我使用cubemx,对HAL库的调用成功的将该串口通信功能实现,也让我对串口通信的理解有了进一步的提升。