对于STM32F103的USART的通讯调试
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。
STM32F103的USART对应的引脚分别为:
USART1:
RX:PA10
TX:PA9
USART2:
RX:PA3
TX:PA2
USART3:
RX:PB11
TX:PB10
一:只使用一个USART接口进行通讯测试,例如使用USART1进行测试
在示例程序中找到下列代码:
p { margin-bottom: 0.25cm; line-height: 115%; background: rgba(0, 0, 0, 0) }
strong { font-weight: bold }
#define DEBUG_USARTx USART1
#define DEBUG_USARTx_BAUDRATE 115200
#define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
#define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
#define
DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define
DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9
#define
DEBUG_USARTx_Tx_GPIO GPIOA
#define
DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10
#define
DEBUG_USARTx_Rx_GPIO GPIOA
#define
DEBUG_USART_IRQn USART1_IRQn
如果只使用一个USART接口进行测试的话只用在此处修改定义即可
通过串口调试工具测试结果如下:

可根据个人不同的需求更换不同的USART 接口,例如更换为USART3:
#define DEBUG_USARTx USART3
#define DEBUG_USARTx_BAUDRATE 115200
#define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()
#define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()
#define
DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define
DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_10
#define
DEBUG_USARTx_Tx_GPIO GPIOB
#define
DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_11
#define
DEBUG_USARTx_Rx_GPIO GPIOB
#define
DEBUG_USART_IRQn USART3_IRQn
二.同时使用USART1和USART3进行测试
1).在自定义的头文件中添加USART3的定义:
#define
DEBUG_USART3 USART3
#define
DEBUG_USART3_BAUDRATE 115200
#define
DEBUG_USART3_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()
#define
DEBUG_USART3_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()
#define
DEBUG_USART3_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define
DEBUG_USART3_Tx_GPIO_PIN GPIO_PIN_10
#define
DEBUG_USART3_Tx_GPIO GPIOB
#define
DEBUG_USART3_Rx_GPIO_PIN GPIO_PIN_11
#define
DEBUG_USART3_Rx_GPIO GPIOB
#define
DEBUG_USART3_IRQn USART3_IRQn
2).在voidHAL_UART_MspInit(UART_HandleTypeDef*
huart)增加USART3的端口配置:
voidHAL_UART_MspInit(UART_HandleTypeDef*
huart)
{
GPIO_InitTypeDef
GPIO_InitStruct;
if(huart->Instance==DEBUG_USARTx)
{
DEBUG_USART_RCC_CLK_ENABLE();
GPIO_InitStruct.Pin
= DEBUG_USARTx_Tx_GPIO_PIN;
GPIO_InitStruct.Mode
= GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed
= GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO,
&GPIO_InitStruct);
GPIO_InitStruct.Pin
= DEBUG_USARTx_Rx_GPIO_PIN;
GPIO_InitStruct.Mode
= GPIO_MODE_INPUT;
GPIO_InitStruct.Pull
= GPIO_NOPULL;
HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO,
&GPIO_InitStruct);
}
else
if(huart->Instance==DEBUG_USART3)
{
DEBUG_USART3_RCC_CLK_ENABLE();
GPIO_InitStruct.Pin
= DEBUG_USART3_Tx_GPIO_PIN;
GPIO_InitStruct.Mode
= GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed
= GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(DEBUG_USART3_Tx_GPIO,
&GPIO_InitStruct);
GPIO_InitStruct.Pin
= DEBUG_USART3_Rx_GPIO_PIN;
GPIO_InitStruct.Mode
= GPIO_MODE_INPUT;
GPIO_InitStruct.Pull
= GPIO_NOPULL;
HAL_GPIO_Init(DEBUG_USART3_Rx_GPIO,
&GPIO_InitStruct);
}
}
3).在voidHAL_UART_MspDeInit(UART_HandleTypeDef*
huart)增加USART3的配置:
void
HAL_UART_MspDeInit(UART_HandleTypeDef*
huart)
{
if(huart->Instance==DEBUG_USARTx)
{
DEBUG_USART_RCC_CLK_DISABLE();
HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO,
DEBUG_USARTx_Tx_GPIO_PIN);
HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO,
DEBUG_USARTx_Rx_GPIO_PIN);
HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
}
else
if(huart->Instance==DEBUG_USART3)
{
DEBUG_USART3_RCC_CLK_DISABLE();
HAL_GPIO_DeInit(DEBUG_USART3_Tx_GPIO,
DEBUG_USART3_Tx_GPIO_PIN);
HAL_GPIO_DeInit(DEBUG_USART3_Rx_GPIO,
DEBUG_USART3_Rx_GPIO_PIN);
HAL_NVIC_DisableIRQ(DEBUG_USART3_IRQn);
}
}
4).添加USART3的初始化设置函数及数据发送函数:
UART_HandleTypeDef
husart3_debug;
void
MX_DEBUG_USART3_Init(void)
{
DEBUG_USART3_GPIO_ClK_ENABLE();
husart3_debug.Instance
= DEBUG_USART3;
husart3_debug.Init.BaudRate
= DEBUG_USART3_BAUDRATE;
husart3_debug.Init.WordLength
= UART_WORDLENGTH_9B;
husart3_debug.Init.StopBits
= UART_STOPBITS_1;
husart3_debug.Init.Parity
= UART_PARITY_EVEN;
husart3_debug.Init.Mode
= UART_MODE_TX_RX;
husart3_debug.Init.HwFlowCtl
= UART_HWCONTROL_NONE;
husart3_debug.Init.OverSampling
= UART_OVERSAMPLING_16;
HAL_UART_Init(&husart3_debug);
}
voiduart3_write(uint8_t*
data,
uint32_tlen)
{
HAL_UART_Transmit(&husart3_debug,
data, len, 0xffffff);
}
在主函数中添加USART3的初始化:
p { margin-bottom: 0.25cm; line-height: 115%; background: rgba(0, 0, 0, 0) }
strong { font-weight: bold }

5).将完成后的程序编译烧录至STM32,同时通过串口调试工具连接USART1和USART3观察通讯结果:
p { margin-bottom: 0.25cm; line-height: 115%; background: rgba(0, 0, 0, 0) }
strong { font-weight: bold }


USART1和USART3可同时向外发送数据。
完成对USART接口的通讯测试。
p { margin-bottom: 0.25cm; line-height: 115%; background: rgba(0, 0, 0, 0) }
strong { font-weight: bold }
p { margin-bottom: 0.25cm; line-height: 115%; background: rgba(0, 0, 0, 0) }
strong { font-weight: bold }
对于STM32F103的USART的通讯调试的更多相关文章
- 第20章 USART—串口通讯—零死角玩转STM32-F429系列
第20章 USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- UART学习之路(三)基于STM32F103的USART实验
关于STM32串口的资料可以在RM0008 Reference Manual中找到,有中文版的资料.STM32F103支持5个串口,选取USART1用来实验,其对应的IO口为PA9和PA10.这次的实 ...
- 第20章 USART—串口通讯
本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...
- USART—串口通讯
本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号, 所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码 . 串口通讯的一个数据包从起始信号开始,直到停止信号结束.数据 ...
- CAN双机通讯调试小结(SJA1000与MCP2515通讯)
2011-12-07 21:36:02. 效果图: 1,51的SJA1000自收自发测试完成,见上一篇小结. 2,SJA1000自测完成后,再自测MCP2515就非常容易.主要是设置工作模式为回环模式 ...
- STM32F103之USART学习记录
1.USART的主要特性 1)名称:串行异步通信接口 2)全双工.异步通信 3)发送和接收速率最高可达4.5MBits/s 4)可编程数据长度8或9bits 5)可配置的停止位:支持1或2位停止位 6 ...
- 用html自己开发自己的串口TCP通讯调试软件
今天给大家介绍一个通讯工具,可以自己写html页面,自己写Js脚本实现数据收发. 本程序在不断完善中,请大家不要喷,多多理解,有意见只管提. 系列文章 概述 串口基础功能 TCP客户端收发 参数篇 串 ...
- STM32F4 SPI双机通讯调试总结
1.如果查询方式进行数据收发,不管是Master,还是Slave,流程如下:(假设收发n+1个字节) a.等待TXE,写入一个字节 b.等待TXE,写入一个字节 c.等待RXNE,读取一个字节 循环b ...
- 第41章 RS-485通讯实验—零死角玩转STM32-F429系列
第41章 RS-485通讯实验 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
随机推荐
- 二进制安装MySQL-5.7.28
系统基础优化 #更改主机名 hostname msyql echo "msyql" >/etc/hostname #修改字符集 echo "LANG="z ...
- fastjson配置序列化过滤转换
@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { @Override public voi ...
- ConcurrentHashMap原理分析(二)-扩容
概述 在上一篇文章中介绍了ConcurrentHashMap的存储结构,以及put和get方法,那本篇文章就介绍一下其扩容原理.其实说到扩容,无非就是新建一个数组,然后把旧的数组中的数据拷贝到新的数组 ...
- 多测师讲解常用的测试工具分为10类_高级讲师肖sir
我们将常用的测试工具分为10类. 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app ...
- 多测师讲解自动化测试 _如何解决验证码的问题_高级讲师肖sir
自动化测试如何解决验证码的问题对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可 ...
- 使用 volatile 关键字保证变量可见性和禁止指令重排序
volatile 概述 volatile 是 Java 提供的一种轻量级的同步机制.相比于传统的 synchronize,虽然 volatile 能实现的同步性要差一些,但开销更低,因为它不会引起频繁 ...
- 【传递闭包】HDU 2157 How many ways??
UPD:现在才发现本题是个传递闭包 题目内容 春天到了,HDU校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定 ...
- idea创建servlet工程初体验
servlet工程创建 前提:创建项目之前需要配置java环境变量 和tomcat配置,配置完成后进入如下操作. tomcat 安装和配置参考 https://www.cnblogs.com/xush ...
- 爬虫学习之-scrapy交互式命令 scrapy查看页面
scrapy shell https:///www.baidu.com 会启动爬虫请求网页 view(response) 会在浏览器打开请求到的临时文件 response.xpath("/ ...
- 前端基础——HTML(二)
HTML标签 标题标签<h1>.<h2>.<h3>.<h4>,标题标签之间是不能嵌套的,下一级标题与上级标题之间通过同级 关于书写,下级标题解释说明的是 ...