再造STM32---第十七部分:USART—串口通讯

发布者:大酉幽华1最新更新时间:2019-09-28 来源: eefocus关键字:STM32  USART  串口通讯 手机看文章 扫描二维码
随时随地手机看文章

本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。

学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。

特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。


17.1 串口通讯协议简介:

物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬

件部分。


协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。

 

1-RS232标准:

RS232标准串口通讯结构图:

1、 RS232标准串口主要用于工业设备直接通信

2、电平转换芯片一般有MAX3232, SP3232

RS-232 与 TTL 电平区别

2-USB转串口

USB转串口通讯结构图

1、 USB转串口主要用于设备跟电脑通信

2、电平转换芯片一般有CH340、 PL2303、 CP2102、 FT232

3、使用的时候电脑端需要安装电平转换芯片的驱动

 

3-原生的串口到串口

1、原生的串口通信主要是控制器跟串口的设备戒者传感器通信,不需要经过电平转换芯片来转换电平,直接就用TTL电平通信

2、 GPS模块、 GSM模块、串口转WIFI模块、 HC04蓝牙模块

 

串口数据包的基本组成

起始位: 由1个逻辑 0 的数据位表示

结束位: 由 0.5、 1、 1.5 戒 2 个逻辑 1 的数据位表示

有效数据:在起始位后紧接着的就是有效数据,有效数据的长度常被约定为 5、 6、 7 戒 8 位长

校验位: 可选,为的是数据的抗干扰性。

校验方法分为:

1-奇校验(odd)、 2-偶校验(even)

3-0 校验(space)、 4-校验(mark)

5-无校验(noparity)

奇校验(odd) : 有效数据和校验位中“ 1”的个数为奇数

比如一个 8 位长的有效数据为: 01101001,此时总共有 4个“ 1” ,为达到奇校验效果,校验位为“ 1” , 最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位

偶校验(even) : 有效数据和校验位中“ 1”的个数为偶数

比如一个 8 位长的有效数据为: 01101001,此时总共有 4个“ 1” ,为达到偶校验效果,校验位为“ 0” , 最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位

0 校验是不管有效数据中的内容是什么,校验位总为“ 0” 。

1 校验是校验位总为“ 1” 。

无校验就是数据包中不包含校验位

 

17.2 STM32串口功能框图讲解:

1-引脚

2-数据寄存器

3-控制器

4-波特率

STM32F4xx数据手册—Pinouts and pin description。

ST每个系列的芯片都有一个数据手册,里面有引脚的详细功能。

TX: 数据发送

RX: 是数据接收

SCLK: 时钟,仅同步通信时使用

nRTS: 请求发送(Request To Send)

nCTS: 允许发送(Clear To Send)

数据寄存器—USART_DR: 9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存

USART_CR1: M, 0: 8bit, 1: 9bit

USART_CR2: STOP

USART_CR1: PCE、 PS、 PEIE

USART_SR : PE

USART_SR: TXE, Transmit data register empty

USART_SR: TC, Transmission complete

USART_CR1: TXEIE

USART_CR1: TCIE

USART_SR: RXNE, Read data register not empty

USART_CR1: RXNEIE

USART_CR1: UE、 TE、 RE

波特率—每秒钟要发送多少数据

USART_BRR:波特率寄存器

USART_CR1: OVER8

USARTDIV:无符号的定点数

FPCLK:串口的时钟,注区分APB2和APB1两条总线

OVER8:过采样模式

 

例如:


USART: USART1,时钟为90M

波特率: 115200

OVER8: 0, 16倍过才样, BRR小数位有效

7.3 STM32串口初始化结构体讲解:

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;

7.4 编程时需要用到的固件库函数:

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)


7.5 代码讲解:

硬件设计-1: TTL电平转USB电平(使用时电脑上记得安装CH340驱动)

硬件设计-2: TTL电平转232电平

编程要点:

1-初始化串口需要用到的GPIO, GPIO_InitTypeDef,

GPIO_PinAFConfig();

2-初始化串口, USART_InitTypeDef

3-中断配置

4-使能串口

5-编写发送和接收函数

6-编写中断服务函数

 


电脑端发送过来的数据是字符格式的

关键字:STM32  USART  串口通讯 引用地址:再造STM32---第十七部分:USART—串口通讯

上一篇:再造STM32---第十八部分:DMA—直接存储区访问
下一篇:再造STM32---第十六部分:SysTick—系统定时器

推荐阅读最新更新时间:2024-11-12 22:08

关于STM32开发板晶振相关的问题汇总
1、自己做了个STM32的板子,,但是手里没有8M的晶振,所以就用了,12M的,,但是不正常,上电之后PA15和PA14接的是两个led,PA15接的led常亮,PA14接的的led不亮,,而且芯片下载程序又能下载,应该不是芯片坏的问题吧,,而且不管我些什么程序进去,两个脚的状态都不变,,我怀疑是电路有问题,,可是我仔细检查了电路和板子,都没问题,,JTAG正常使用。我用的是12M的晶振,这会有影响吗?感觉不管下什么程序进去感觉芯片好像没有运行。 答:如果使用12M的晶振,那么要修改启动文档中的关于RCC的语句。 因为如果你使用库文件的话,ST的库,默认外部晶振是8M,所以如果你不修改RCC部分的语句,会造成CPU不启动,
[单片机]
stm32专题十一:USART(二)结构框图
USART的结构框图 引脚: TX RX 发送和接收 SW-_RX 用于智能卡模式(很少用) IRDA_OUT IRDA_IN 红外通信数据的输出和输入 nRTS nCTS 硬件流控,很少用 SCLK 同步时钟(同步模式下使用) USART的引脚分配如下表,注意,只有USART1挂载到APB2高速总线上,其他的串口都是在APB1总线。 数据寄存器:USART_DR,是一个对应两个寄存器(USART_TDR和USART_RDR),寄存器的低9位 位数据有效,由USART_CR1的M位设置,当M = 0时,表示8个数据位(最常用),M = 1时表示9个数据位(很少用)。因为有两个寄存器,所以TX和RX可
[单片机]
<font color='red'>stm32</font>专题十一:<font color='red'>USART</font>(二)结构框图
CRC校验、STM32中CRC计算单元、CRC应用
从这一段时间后台反馈的问题可以看得出来,好些朋友对CRC没有什么概念,今天就在这里讲述一下关于CRC校验、STM32中CRC计算单元相关内容。 1关于CRC校验 CRC:Cyclic Redundancy Check,即循环冗余校验码。 CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 ---来自百度百科 学电子、计算机相关专业的同学都应该学习过CRC的基础原理。其原理说难不难,可以说就是一个公式。同时,
[单片机]
CRC校验、<font color='red'>STM32</font>中CRC计算单元、CRC应用
STM32-DAC生成1Hz三角波【DAC触发方式深入理解】
前文《STM32-一文搞懂DAC》的1.2节对触发方式进行了详细的说明,也简单介绍了三角波的生成原理。本文记如何配置一定频率的三角波以及为什么这么配置。 1 概述 三角波的数据生成是由一个单独的计数器往复加减生成的,每次触发之后该计数器会加1/减1。在每个周期过峰值之前,每次触发条件之后加1;过峰值之后,每次触发条件之后减1。但是要先想生成三角波必须以固定的周期加减其输出幅度!也就是以固定的周期触发转换!怎么办呢?谁可以让它以固定的周期?哈哈蛤,定时器!通过设定三角波计数器最大值、定时器触发周期,就可以确定生成的三角波的频率。 前文回顾: DACx模块内部有一个三角波计数器,每次触发事件之后3个APB1时钟周期后累加1
[单片机]
STM32-DAC生成1Hz三角波【DAC触发方式深入理解】
STM32之串口通信
串口通信原理 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹
[单片机]
<font color='red'>STM32</font>之串口通信
STM32 PWM的输出与Keil软件仿真
STM32 PWM的输出 脉冲宽度模式(PWM模式)可以用来产生一个由TIMx_ARR寄存器确定平率,由TIMx_CCRx寄存器确定占空比的信号。在STM32开发中,由于官方提供了较为完善的库函数,使得我们的开发工作变得相当的轻松,甚至可以在不需要太多了解硬件结构的条件下,完成我的开发工作,实现我们所需要的功能。在此,笔者也建议大家,在初学的时候尽量去熟悉固件库中提供的函数来调节PWM的频率和占空比,对底层寄存器的操作应尽量减少。 本文使用的STM32F103RB的芯片,输出通道是TIM2_CH2通道,STM32有较强的可移植性,如果读者的芯片类型跟我不一样,可以做适当的修改,完成自己的开发。 使用到的库函数有: s
[单片机]
STM32学习笔记整理之(2)——外部中断
学习STM32也快一年了,现在工作的内容跟用的是STM32平台的,趁着年前工作量比较小,总结一下STM32的基础知识,不出意外的话将会连续发布完整的笔记整理,学习的时候主要是跟着野火教程学的,然后在整理出适合自己的笔记。 2.1 NVIC配置 1、中断分组 在配置优先级的时候,NVIC 只可以配置 16 种中断向量的优先级,抢占优先级和响应优先级的数量由一个 4 位的数字来决定,把这个 4 位数字的位数分配成抢占优先级部分和响应优先级部分。 有 5 组分配方式: 第0组:所有4位用来配置响应优先级。 第1组:最高1位配抢占优先级,低3位配响应优先级。2^1=2 种抢占优先级(0,1),2^3=8 种响应优先级, 第2组:2位
[单片机]
GD32代码移植STM32(一)
GAIWEI例子:GD32F103移植STM32F103 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存器地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是STM32F10x主频是72兆。所以需要针对以RCC时钟进行修改。 1.先将芯片的选项进行修改:查找对应芯片。 2.将STM32的启动文件替换成GD的启动文件。 3.修改时钟相关配置。 打开stm32f10x.h文件,#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*! Time out for HSE start up
[单片机]
GD32代码移植<font color='red'>STM32</font>(一)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved