STM32CubeMX基于HAL库实现简单串口通信
STM32CubeMX基于HAL库实现简单串口通信
板子:STM32F103C8
编译工具:Keil+STM32CubeMX
烧录工具:FlyMcu
串口调试程序:XCOM
实验要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”
文章目录
- STM32CubeMX基于HAL库实现简单串口通信
- 一、串口通讯原理
- 1. 简介:
- 2. USART:
- 2.1 USERT简介:
- 2.1 USERT特性:
- 3. 串口通信过程
- 二、实验
- 1. STM32CubeMX
- 2. Keil TIME!
- 3. 实机运行
- 3.1 使用FlyMcu烧录hex文件
- 3.2 使用XCOM接收信息
- 三、总结
- 四、参考文章
一、串口通讯原理
1. 简介:
在串行通信中,一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束。在进行传输之前,双方一定要使用相同的波特率设置。波特率就是每秒钟传输的数据位数。常用的两种基本串行通信方式包括同步通信和异步通信。我们通常使用的是异步通信,异步通信规定传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成。串口通讯有HAL 库轮询,中断,DMA 三种通信模式:
- 轮询方式:CPU不断查询IO设备,如设备有请求则加以处理。例如CPU不断查询串口是否传输完成,如传输超过则返回超时错误。轮询方式会占用CPU处理时间,效率较低。
- 中断控制方式:当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。
- 直接内存存取技术(DMA)方式:所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪。
2. USART:
2.1 USERT简介:
USART,英文全称——Universal Synchronous/Asychronous Receiver/Transmitter,即通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
在STM32中文参考手册第516页也做了比较详细的介绍。
2.1 USERT特性:
.
3. 串口通信过程
二、实验
1. STM32CubeMX
搜索框中输入STM32F103C8选择对应芯片
双击芯片
进入项目/点击start Project
右侧栏中点击
A->Z
->USERT1
Mode选择
Asynchronous
异步通信设置参数:(以下在最新版本地Cube中是默认参数,可以跳过这一步)
- 波特率:115200 Bits/s
- 字符长度:8 Bits
- 停止位 Stop Bits:1
- 校验位 Parity:None
项目配置四步骤
- 设置名称;Basic;IDE是MDK-ARM
- Code Generator中勾选此选项生成对应.c和.h文件方便管理
注意:以上所展示设置仅仅针对串口通信这一单一功能,如果需要使用Keil的软件仿真逻辑分析仪功能观察串口的输出波形,还需要额外配置(其实就和流水灯一样),具体配置请参考:我的上一遍文章STM32CubeMX基于HAL库的流水灯实验
2. Keil TIME!
在Cube中Generate Code
后选择open project跳转至Keil
- 来到main.c中的while循环中添加下列代码:
//高电平点亮A4HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//发送的数据char data[]="hello windows!\n";//发送HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);//延时0.5SHAL_Delay(500);//低电平熄灭A4HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//延时0.5SHAL_Delay(500);
在这之前我已经配置好了A4管脚的相关功能并未在文中展示
配置魔法棒(一劳零逸)
build项目->debug
打开UART1窗口以及仿真示波器窗口
Run!!!!
3. 实机运行
3.1 使用FlyMcu烧录hex文件
选择串口后先清空芯片再点击开始编程
3.2 使用XCOM接收信息
看到这里可能有一些疑惑,图中的输出并没有像Keil中的仿真程式一样换行,这是为什么呢?
因为XCOM中并不支持\n
换行符,我们把\n
换成\r
就行了。
三、总结
USART功能非常强大,本次实验只进行了最基础的操作,若想继续探究,还需多多练习。
另外希望不要学一半丢一半,要时常结合前面所学的知识来进行应用,顺便可以巩固。
四、参考文章
醉意丶千层梦:基于HAL库实现stm32简单串口通信
安迪西:STM32CubeMX系列|串口通讯
江南烟脓雨:STM32F103串口通信USART小试牛刀
STM32CubeMX基于HAL库实现简单串口通信相关推荐
- STM32CubeMX与HAL库学习--简单的CAN回环测试
STM32CubeMX与HAL库学习--简单的CAN回环测试 前言 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 后续 前言 本人小白,最近看了CAN协议与STM32的bxC ...
- HAL库学习之串口通信
目录 一.串口通讯协议简介 一.物理层 1.电平标准 二.协议层 1.波特率 2.通讯的启示和停止信号 3.数据校验 三.STM32的串口简介 四.软件实现 1.通过图形化软件CubeMX配置 2.程 ...
- STM32CubeMX基于HAL库点亮LED灯
开发环境:Windows 软件: 1.STM32CubeMX 6.3.0 2.MDK 5.14 一.cubeMX的基本配置 1.选择MCU 2.配置时钟 查看电路图,8MHz的高速外部晶振接到 OSC ...
- STM32软件学习笔记(一)基于HAL库的STM32F429单片机串口打印程序
|版权声明:本文为博主原创文章,转载请注明出处.https://blog.csdn.net/NeverImagine_/article/details/95517664 目前ST官方有提供两种库文 ...
- STM32 串口DMA接收 Openmv / K210 整数、小数字符串数据 (基于HAL库)
目录 前言 一.工程配置 二.串口DMA部分代码 1.源文件UART_DMA.c 2.头文件UART_DMA.h 3.stm32f1xx_it.c的修改 4.串口收发DMA测试 三.字符串数字提取代码 ...
- 正点原子STM32F103精英版开发环境搭建并编写第一个程序(使用串口下载,基于HAL库)
一:软件下载: 使用图形化配置软件:STM32cubeMX,支持HAL库. 1,下载stm32cubeMX; 2,下载STM32f103器件包: 3,下载IED:keil5 arm版本: 4,下载 s ...
- STM32外挂FLASH模拟U盘(基于HAL库)
STM32外挂FLASH模拟U盘(基于HAL库) 1.背景 1.1这篇文章能给你带来什么 1.2根据你要解决的问题,精确快速跳转到相应位置 1.3我在做完这个后还有不明白的地方,希望能有大触解答困惑 ...
- STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)
01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...
- STM32F103C8T6基于HAL库制作RTC时钟
目录 一.RTC时钟原理 二.新建工程 三.修改代码 四.烧录运行 参考文献 了解实时时钟RTC的原理.STM32芯片自带RTC,因此不须像其他MCU需外接RTC模块.请编程实现STM32的日历读取. ...
最新文章
- 远程办公难?实战经验为你打消4大顾虑
- jFreeChary初探
- 全网独发gensim中similarities.Similarity用法
- 秘鲁农业谋定出口-国际农民丰收节贸易会:期待对华准入
- mysql 失效转移_MySQL基于MHA的FailOver过程
- 数据分析李小璐PG one出轨门自卫反击战
- jQuery修改alert ,confirm的样式
- # 20155337 《Android程序设计》实验四实验报告
- java初学者必看经典
- F5实现2台机器的热备 Priority Group Activation
- mysql的分区技术
- bzoj4571/luogu3293 美味 (主席树+贪心)
- DeepMatch推荐系统中的常用算法——Youtube的DeepMatch
- python暴力破解WiFi
- 基于MATLAB的疲劳检测系统研究解析
- Recommending What Video to Watch Next: A Multitask Ranking System
- 顺序结构-计算标准体重
- 在Centos 5.x或6.x上安装RHEL EPEL Repo
- ndnSIM学习(八)——examples之ndn-simple.cpp每个函数逐行剖析
- 安信可ESP32-CAM摄像头开发demo--局域网拍照、实时视频、人脸识别
热门文章
- 字符串类型的数字的加减乘除运算
- 用C语言/C++实现一个基础的电话簿
- 简单了解一下LCD屏工作原理
- Access-Control-Allow-Credentials
- 洛谷 P3159(BZOJ 2668)[CQOI2012]交换棋子
- python按字典顺序输出单词频率_用python编写一段程序,输入若干单词,按照单词长短进行排序,并统计所有单词中每个字母(a-z)出现的次数...
- NBUT 1665 木块拼接
- iOS开发 之字体类型的设置与选择
- 百度AI语音SDK集成
- 蓝桥杯 Python 练习题 数字游戏