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的通讯调试的更多相关文章

  1. 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章      USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  2. UART学习之路(三)基于STM32F103的USART实验

    关于STM32串口的资料可以在RM0008 Reference Manual中找到,有中文版的资料.STM32F103支持5个串口,选取USART1用来实验,其对应的IO口为PA9和PA10.这次的实 ...

  3. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

  4. USART—串口通讯

    本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号, 所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码 . 串口通讯的一个数据包从起始信号开始,直到停止信号结束.数据 ...

  5. CAN双机通讯调试小结(SJA1000与MCP2515通讯)

    2011-12-07 21:36:02. 效果图: 1,51的SJA1000自收自发测试完成,见上一篇小结. 2,SJA1000自测完成后,再自测MCP2515就非常容易.主要是设置工作模式为回环模式 ...

  6. STM32F103之USART学习记录

    1.USART的主要特性 1)名称:串行异步通信接口 2)全双工.异步通信 3)发送和接收速率最高可达4.5MBits/s 4)可编程数据长度8或9bits 5)可配置的停止位:支持1或2位停止位 6 ...

  7. 用html自己开发自己的串口TCP通讯调试软件

    今天给大家介绍一个通讯工具,可以自己写html页面,自己写Js脚本实现数据收发. 本程序在不断完善中,请大家不要喷,多多理解,有意见只管提. 系列文章 概述 串口基础功能 TCP客户端收发 参数篇 串 ...

  8. STM32F4 SPI双机通讯调试总结

    1.如果查询方式进行数据收发,不管是Master,还是Slave,流程如下:(假设收发n+1个字节) a.等待TXE,写入一个字节 b.等待TXE,写入一个字节 c.等待RXNE,读取一个字节 循环b ...

  9. 第41章 RS-485通讯实验—零死角玩转STM32-F429系列

    第41章     RS-485通讯实验 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

随机推荐

  1. Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  2. 算法进阶 (LIS变形) 固定长度截取求最长不下降子序列【动态规划】【树状数组】

    先学习下LIS最长上升子序列 ​ 看了大佬的文章OTZ:最长上升子序列 (LIS) 详解+例题模板 (全),其中包含普通O(n)算法*和以LIS长度及末尾元素成立数组的普通O(nlogn)算法,当然还 ...

  3. 使用css实现轮播图

    使用css3实现图片轮播 前言:实现图片轮播的方式有很多种 ,例如js ,css 等等. 本文主要讲述使用纯css3实现轮播图 工具介绍: 使用的编辑器: Hbuilder 进入正题 html代码: ...

  4. Jersey实现跨服务器上传图片:UniformInterfaceException:403 Forbidden

    jersey.api.client.UniformInterfaceException :returned a response status of 403 Forbidden 图片服务器:端口808 ...

  5. 实验五 css进阶应用

    实验五 css进阶应用 实验目的: 掌握CSS在列表中的应用,能利用CSS将列表做成精美的导航栏: 掌握CSS在表单元素中的应用: 掌握SPRY菜单的制作方法和CSS代码修改. 实验内容: 1. 制作 ...

  6. 多测师讲解python函数 _zip_高级讲师肖sir

    # zip函数 #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存.1.使用zip讲两个列表打印出来的结果是 ...

  7. selenium原理学习笔记

    一,selenium工作原理(参考文档:https://blog.csdn.net/dawei_yang000000/article/details/87639928) 自动化测试代码发送请求给到浏览 ...

  8. 为什么说 Python 内置函数并不是万能的?

    本文出自"Python为什么"系列,请查看全部文章 在Python猫的上一篇文章中,我们对比了两种创建列表的方法,即字面量用法 [] 与内置类型用法 list(),进而分析出它们在 ...

  9. docker系统化学习图文+视频教程

    1.背景 博客对应的视频课程: 9.9元在线学习:https://study.163.com/course/courseMain.htm?share=2&shareId=40000000033 ...

  10. spring boot:接收数组参数及多文件混合json参数(spring boot 2.3.4)

    一,生产环境中的复杂参数上传的场景 1,保存排序值 : 例如:某一件商品的多张展示图片排序,提交的排序值要和图片的id相对应 2,上传多张图片,图片要和指定的变量相对应 例如:在添加商品sku时, 需 ...