一、STM32 的 USART 简介:
STM32 芯片具有多个 USART 外设用于串口通讯,它是 Universal SynchronousAsynchronous Receiver and Transmitter 的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于 USART,它还有具有 UART 外设(UniversalAsynchronousReceiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。
USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。 USART 支持同步单向通信和半双工单线通信;还支持局域互连网络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC 规范。
USART 支持使用 DMA,可实现高速数据通信。
USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。STM32 的 USART 输出的是 TTL 电平信号,若需要 RS-232 标准的信号可使用MAX3232 芯片进行转换。
二、协议层:
1、数据包的组成:
2、波特率:
主要使用的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,常见的波特率为4800、 9600、 115200 等。
3、通讯的起始和停止信号:
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
4、有效数据:
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。
5、数据校验:
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity)。
三、编程要点:
1-初始化串口需要用到的GPIO, GPIO_InitTypeDef,GPIO_PinAFConfig();
2-初始化串口, USART_InitTypeDef
3-中断配置
4-使能串口
5-编写发送和接收函数
6-编写中断服务函数
四、编程时需要用到的固件库函数:
1-配置GPIO为具体的第二功能
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
2-中断配置函数
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,FunctionalState NewState)
3-串口使能函数
void USART_Cmd(USART_TypeDef* USARTx,FunctionalState NewState)
4-数据发送函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
5-数据接收函数
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
6-中断状态位获取函数
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
五、一些结构体:
USART初始化结构体
typedef struct
{
uint32_t USART_BaudRate; //波特率 BRR
uint16_t USART_WordLength; //字长 CR1_M
uint16_t USART_StopBits; //停止位 CR2_STOP
uint16_t USART_Parity; //校验控制 CR1_PCE、 CR1_PS
uint16_t USART_Mode; //模式选择CR1_TE、 CR1_RE
// 硬件流选择 CR3_CTSE、 CR3_RTSE
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
同步时钟初始化结构体
typedef struct
{
uint16_t USART_Clock; // 同步时钟 CR2_CLKEN
uint16_t USART_CPOL; // 极性 CR2_CPOL
uint16_t USART_CPHA; // 相位 CR2_CPHA
uint16_t USART_LastBit; //最后一个位的时钟脉冲 CR2_LBC
} USART_ClockInitTypeDef;
六、代码片段:
#ifndef __BSP_USART_H
#define __BSP_USART_H
/**
******************************************************************************
* @file bsp.usart.c
* @author Sumjess
* @version V1.0
* @date 2019-09-10
* @brief MDK5.27
******************************************************************************
* @attention
*
* 实验平台 :STM32 F429
* CSDN Blog :https://blog.csdn.net/qq_38351824
* 微信公众号 :Tech云
*
******************************************************************************
*/
#include "stm32f4xx.h"
#include //---------------------------------------------------------------------------------------------// // STM32F429IGT6 芯片的 USART 引脚 // APB2(最高 90MHz) APB1(最高 45MHz) // USART1 USART6 USART2 USART3 UART4 UART5 UART7 UART8 //TX PA9/PB6 PC6/PG14 PA2/PD5 PB10/PD8/PC10 PA0/PC10 PC12 PF7/PE8 PE1 //RX PA10/PB7 PC7/PG9 PA3/PD6 PB11/PD9/PC11 PA1/PC11 PD2 PF6/PE7 PE0 //SCLK PA8 PG7/PC8 PA4/PD7 PB12/PD10/PC12 //nCTS PA11 PG13/PG15 PA0/PD3 PB13/PD11 //nRTS PA12 PG8/PG12 PA1/PD4 PB14/PD12 ///////////////////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------// //串口1中断开关 /*******************************************************/ #define EXTI_KEY 0 ///////////////////////////////////////////////////////// //串口开关 /*******************************************************/ #define USART1_Switch 1 #define USART2_Switch 1 #define USART3_Switch 1 #define UART4_Switch 1 #define UART5_Switch 1 #define USART6_Switch 1 #define UART7_Switch 1 #define UART8_Switch 1 //!!!USART和UART区别:USART即可以同步通信,又可以异步通信; // UART 只能异步通信; // SCLK、nCTS、nRTS这些引脚UART没有。 ////////////////////////////////////////////////////////// //① 重定向c库函数printf到串口,重定向后可使用printf等函数 //② 重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数 //选择使用串口被允许使用 ① ② #define DEBUG_USART_printf_choose DEBUG_USART1 ////////////////////////////////////////////////////////// //------------------------------------------------------// //引脚定义 /*******************************************************/ #if USART1_Switch #define DEBUG_USART1 USART1 #define DEBUG_USART1_CLK RCC_APB2Periph_USART1 //注意!只有串口1和6是APB2为90M,其他均为APB1为45M #define DEBUG_USART1_BAUDRATE 115200 //串口波特率 #define DEBUG_USART1_RX_GPIO_PORT GPIOA #define DEBUG_USART1_RX_GPIO_CLK RCC_AHB1Periph_GPIOA #define DEBUG_USART1_RX_PIN GPIO_Pin_10 #define DEBUG_USART1_RX_AF GPIO_AF_USART1 //映射 #define DEBUG_USART1_RX_SOURCE GPIO_PinSource10 //!!!一个引脚有许多功能,通过映射将引脚与你要选的功能连接起来。 #define DEBUG_USART1_TX_GPIO_PORT GPIOA #define DEBUG_USART1_TX_GPIO_CLK RCC_AHB1Periph_GPIOA #define DEBUG_USART1_TX_PIN GPIO_Pin_9 #define DEBUG_USART1_TX_AF GPIO_AF_USART1 //映射 #define DEBUG_USART1_TX_SOURCE GPIO_PinSource9 //////////////////////////////////中断部分配置////////////////////////////////// #define DEBUG_USART_IRQHandler USART1_IRQHandler #define DEBUG_USART_IRQ USART1_IRQn //串口1中断 #endif //////////////////////////////////////////////////////////////////////////////////////////////////// #if USART2_Switch /************************************************************/ //串口2引脚定义 /*******************************************************/ #define DEBUG_USART2 USART2 #define DEBUG_USART2_CLK RCC_APB1Periph_USART2 #define DEBUG_USART2_BAUDRATE 115200 //串口波特率 #define DEBUG_USART2_RX_GPIO_PORT GPIOD #define DEBUG_USART2_RX_GPIO_CLK RCC_AHB1Periph_GPIOD #define DEBUG_USART2_RX_PIN GPIO_Pin_6 #define DEBUG_USART2_RX_AF GPIO_AF_USART2 //映射 #define DEBUG_USART2_RX_SOURCE GPIO_PinSource6 //!!!一个引脚有许多功能,通过映射将引脚与你要选的功能连接起来。 #define DEBUG_USART2_TX_GPIO_PORT GPIOD #define DEBUG_USART2_TX_GPIO_CLK RCC_AHB1Periph_GPIOD #define DEBUG_USART2_TX_PIN GPIO_Pin_5 #define DEBUG_USART2_TX_AF GPIO_AF_USART2 //映射 #define DEBUG_USART2_TX_SOURCE GPIO_PinSource5 #endif //////////////////////////////////////////////////////////////////////////////////////////////////// #if USART3_Switch /************************************************************/ //串口3引脚定义 /*******************************************************/ #define DEBUG_USART3 USART3 #define DEBUG_USART3_CLK RCC_APB1Periph_USART3 #define DEBUG_USART3_BAUDRATE 115200 //串口波特率 #define DEBUG_USART3_RX_GPIO_PORT GPIOB #define DEBUG_USART3_RX_GPIO_CLK RCC_AHB1Periph_GPIOB
上一篇:STM32复习笔记(七)定时器&定时器中断
下一篇:梳理STM32F429之通信传输部分---NO.2 硬件IIC
推荐阅读
史海拾趣
随着技术的不断进步,Appointech Inc公司意识到只有不断创新才能在竞争激烈的市场中立足。因此,公司加大了对研发的投入,不断引进新的技术和设备。经过团队的不懈努力,公司成功开发出了一款具有颠覆性的电子产品,该产品不仅性能卓越,而且具有高度的集成性和便利性,为公司在行业中树立了新的标杆。
在导航芯片领域,迦美信芯也取得了显著成就。由公司董事长兼CTO倪文海主导开发的兼容“GPS+北斗导航”的射频芯片,被国内主要基带厂商广泛采用,占据了北斗细分市场60%的份额。这一成就不仅彰显了迦美信芯在导航芯片领域的强大实力,也为其在物联网和汽车电子等领域的应用奠定了坚实基础。
随着技术的不断进步,Catalyst / ON Semiconductor公司逐渐在半导体领域取得了重要的技术突破。公司投入大量资源进行研发,成功开发出了一系列高性能、低功耗的半导体产品,这些产品在市场上受到了广泛的欢迎。这些技术突破不仅提升了公司的市场竞争力,也为整个电子行业的发展注入了新的活力。
在电子行业的早期,Catalyst / ON Semiconductor公司由一群富有远见和热情的工程师创立。他们看到了半导体技术在电子领域的巨大潜力,并决定投身于这一新兴的产业。初创时期,公司面临着资金短缺、技术难题和市场接受度低等多重挑战。然而,凭借团队成员的坚持不懈和勇于创新的精神,他们成功开发出了几款具有竞争力的半导体产品,并逐渐在市场上获得了一席之地。
为了进一步提升技术实力和市场竞争力,Fascomp积极寻求与国际知名企业的技术合作。通过与多家跨国公司的联合研发项目,Fascomp成功吸收和借鉴了国际先进的技术和管理经验。此外,公司还积极拓展海外市场,产品远销欧美、亚洲等多个国家和地区,进一步提升了公司的国际化水平。
Fascomp公司起源于一间小型的电子产品研发工作室。创始人李明和他的团队在资金紧张、技术条件有限的情况下,坚持自主研发一款高性能的芯片。经过无数次的失败和试验,他们最终成功开发出了一款具有竞争力的芯片,赢得了市场的初步认可。这个过程中,团队成员的坚持和对技术的执着追求成为了公司后续发展的基石。
嘉楠K510开发板的AI应用5——模型验证和格式转换 在前一篇(https://bbs.eeworld.com.cn/thread-1228112-1-1.html)已经基于自建模型训练了一个分类模型“model_ex-019_acc-0.744914_loss-0.569983”, 从名字就可以 ...… 查看全部问答∨ |
有偿求启航开发板STM32F103VET6 全套资料【悬赏20元】 朋友送了一个启航 开发板STM32F103VET6 -KIT-V3 ,但是资料却没有,在网上只有零星的。 有偿求启航开发板STM32F103VET6 -KIT-V3 全套资料,20元 有的朋友请发送到我的邮箱yans88@126.com … 查看全部问答∨ |
本帖最后由 TL-LED 于 2022-12-18 20:33 编辑 一、资料下载 1.1、开发板硬件资料及使用手册 官网资料下载链接:https://occ.t-head.cn/vendor/detail/index?id=4105634631926222848&key=download&spm=a2cl5.26076654.0.0.47237532ljYe ...… 查看全部问答∨ |
收到MPS的快递有段时间了,最近也一直比较忙,还没来得及拆箱,今天有点时间,正好分享下。 箱子很大,包装很扎实。 打开后就有MPS产品的说明,很贴心,还有送货单,信息很全面。 买了两种物料,分开两个盒子包装,这点MPS很舍得。 最 ...… 查看全部问答∨ |
【行空板 Python编程学习主控板】评测十、百度AI在线语音识别及合成 本帖最后由 天意无罪 于 2022-12-19 12:40 编辑 前面的测评,完成了对行空板的软硬件学习和测试验证,后面的测评内容主要就是完成两个应用设计:基于百度AI的智能语音机器人,以及基于人脸识别 ...… 查看全部问答∨ |
查看了与编辑的聊天记录,发现18号是行空板的评测截至时间,不得不在发完上篇评测贴后赶紧写下这篇评测总结贴。 由于此次评测时间刚好是年底,平时工作事务太多,每天 ...… 查看全部问答∨ |
[ ST NUCLEO-U575ZI-Q 测评] Mac下STM32CubIDE点灯 mac 环境下没有keil,现在改为stm32 cubeide环境下开发。 # 下载安装程序 1、st-stm32cubeide_1.11.0_13638_20221122_1308_x86_64.dmg (https://www.stmcu.com.cn/Designresource/load_design_resource/cat_code/firmware_software/pro ...… 查看全部问答∨ |
|
System Identification Methods for (Operational) Modal Analysis Review and Com... 本帖最后由 lihuanyang 于 2022-12-19 09:49 编辑 基于模型分析预览对照的系统辨识方法;全英文原版 … 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- vishay照明,智勇闯关赢好礼!
- Follow me第2期来袭,与得捷一起解锁开源硬件 Adafruit ESP32-S3 TFT Feather!
- 【EEWORLD第三十二届】2011年11月社区明星人物揭晓!
- 瑞萨电子颠覆传统理念的嵌入式开发平台 Renesas Synergy™ 评估套件震撼来袭!答题即可免费申请!
- 和风暖阳,我与春天有个约会!
- 【抢楼有礼】TI TMS320F28377S 入门经验大搜集!
- 一键获取【TI 五大工业参考设计 FAQ】
- 抢先体验NUCLEO家族新贵,ST STM32 NUCLEO-F091RC开发板28元包邮!
- 【备战国赛】超多电赛干货资料等你下载!盖楼助力电赛赢积分
- 了解PI最新产品,评论、下载抢楼好礼送!