144 stm32 USART串口的应用.docx

上传人:b****5 文档编号:8267964 上传时间:2023-01-30 格式:DOCX 页数:14 大小:1.90MB
下载 相关 举报
144 stm32 USART串口的应用.docx_第1页
第1页 / 共14页
144 stm32 USART串口的应用.docx_第2页
第2页 / 共14页
144 stm32 USART串口的应用.docx_第3页
第3页 / 共14页
144 stm32 USART串口的应用.docx_第4页
第4页 / 共14页
144 stm32 USART串口的应用.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

144 stm32 USART串口的应用.docx

《144 stm32 USART串口的应用.docx》由会员分享,可在线阅读,更多相关《144 stm32 USART串口的应用.docx(14页珍藏版)》请在冰豆网上搜索。

144 stm32 USART串口的应用.docx

144stm32USART串口的应用

一、串行通信的基本概念

(一)通信的基本概念

通信,最少要有两个对象,一个收,一个发。

通信方式分为同步通信和异步通信。

1.同步通信和异步通信

(1)同步通信

一般情况下同步通信指的是通信双方根据同步信号进行通信的方式(使用同一个时钟)。

比如通信双方有一个共同的时钟信号,大家根据时钟信号的变化进行通信,如:

SPI,I2C

(2)异步通信:

指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。

异步通信不需要同步信号,但是并不是说通信的过程不同布,如:

串口。

缺点:

因为使用的是不同的时钟,在传输数据时容易产生误差,当数据量大了之后误差就可能会很大。

优点:

不受时钟的限制

2.串行通信和并行通信的区别

串行通信:

指的是同一时刻只能收或发一个bit位信息。

因此只用1根信号线即可。

并行通信:

指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行

3.单工、半双工、全双工

单工:

要么收,要么发,只能做接收设备或者发送设备。

比如收音机

半双工:

可以收,可以发,但是不能同时收发,比如对讲机

全双工:

可以在同一时刻既接收,又发送。

手机

4.常见通信总结

SPI和IIC一般用于同一个设备上的两个芯片之间的通信,SPI和IIC的线实在板子上的那些个走线。

一般都是用于近距离通信。

UART用于两个设备之间的通信。

(二)USART介绍

通用同步异步收发器(USART)灵活地与外部设备进行全双工数据通信,满足外部设备对工业标准NRZ异步串行数据格式的要求。

USART通过小数波特率发生器提供了多种波特率。

它支持同步单向通信和半双工单线通信;还支持LIN(局域互联网络),智能卡协议与IrDA(红外数据协会)SIRENDEC规范,以及调制解调操作(CTS/RTS)。

而且,它还支持多处理器通信。

但依然是常用来当做串口,进行调试打印。

*UART是异步通信,USART是可以进行同步通信的

USART支持同步模式,因此USART需要同步始终信号USART_CK(如STM32单片机),通常情况同步信号很少使用,因此USART和一般单片机UART使用方式是一样的,都使用异步模式。

(三)串口的电路连接

两头都要接地。

开发板和PC相连需要转换器是因为电平不同。

(四)STM32f051串口

串口2是连接wifi芯片的

STM32F051内置多达两个通用同步/异步收发器(USART1和USART2),通信速度可达6Mbit/s

(五)串口的通信协议

0101000000

TXD串口输出0x05波形图、低位先发送:

一般串口通信能够传输5-8位,但是我们的32板子能够传输8-9位。

数据位的位数要事先设置好。

奇偶校验位:

数据位+奇偶校验位中的1的个数。

1:

数据位+奇偶校验位中1的个数为奇数。

0:

数据位+奇偶校验位中1的个数为偶数。

(六)波特率

在串行通信中,用“波特率”来描述数据的传输速率。

所谓波特率,既每秒传送的二进制位数,其单位为bps(bitspersecond)。

它是衡量串行数据速度快慢的重要指标。

国际上规定一个标准的波特率系列:

110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……

例如:

115200bps、指每秒传送115200位。

通信双方必须设置同样的同学速率才能正常通信

注意:

实际的数据没这么多,还包括起始位,结束位,校验位

二、串口寄存器介绍

我们一般来说的配置方式为8N1,

8:

数据位有8位

N:

没有奇偶校验位

1:

1位停止位

(一)控制寄存器——USART_CR1

(二)控制寄存器——USART_CR2

(三)波特率寄存器——USART_BRR

需要用到响应的公式来配置,但是我们用cubemax来配置的话,就不需要知道这个公式,都是用图形化做出的。

(四)中断和状态寄存器——USART_ISR

(五)串口数据的接收与发送

当不用FIFO方式的时候,先把数据放到TDR寄存器中,然后一位一位的发送

1.数据接收寄存器——USART_RDR

2.数据发送寄存器——USART_TDR

三、Stm32实现串口数据的收发

(一)串口硬件原理图

注意:

如果无法识别串口,清装好ch340串口驱动

(二)CubeMX中串口的配置

波特率,数据位,校验位...

(三)串口发送一个字符

voidUart_Putchar(uint8_tch)

{

while(!

(USART1->ISR&(1<<7)));//等待发送寄存器空

USART1->TDR=ch;//发送字符

}

voidUart_Putstring(uint8_t*str)

{

while(*str!

='\0')

{

Uart_Putchar(*str);

str++;

}

}

(四)串口接收一个字符

uint8_tUart_Getchar(void)

{

while(!

(USART1->ISR&(1<<5)));//等待收到一个字符的数据

returnUSART1->RDR;//返回收到的字符

}

四、HTL串口库函数的使用及printf的实现

(一)HAL库中串口的收发函数

Stm32f0xx_hal_uart.c文件中

功能:

串口的发送函数

原型:

HAL_UART_Transmit(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout)

参数:

huart:

串口号

Pdata:

发送的数据

Size:

发送的数据长度

Timeout:

超时,单位:

毫秒。

功能:

串口的接收函数

原型:

HAL_UART_Receive(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout)

参数:

huart:

串口号

Pdata:

接受的数据,收数据的buf

Size:

接受的数据长度,buf长度

Timeout:

超时,单位:

毫秒。

*注意buf的清空,不然会一直在接受。

(二)Printf()实现—串口重定向

printf函数调用的是c库中的fputc函数。

因此我们如果重新写了fputc函数,就可以改变printf函数的功能,可以向串口打印输出。

int fputc(int ch,FILE *f)

{

while((USART1->ISR&(1<<7)) == 0);

USART1->TDR=(uint8_t)ch;

return ch;

}

五、作业

●请描述串口通信协议

串口通信的协议顺序有起始位、数据位、奇偶校验位、停止位。

起始位:

因TX/RX是拉高状态平时为高电平,因此需要给一个低电平作为起始位。

数据位:

传送数据内容位数,数据位的位数要事先设置好。

我们用cubemx设置。

Stm32中,一般有奇偶校验就是9,没有奇偶校验就是8.

奇偶校验位:

数据位+奇偶校验位中的1的个数。

1:

数据位+奇偶校验位中1的个数为奇数。

0:

数据位+奇偶校验位中1的个数为偶数。

停止位:

高电平1~2位表示数据传输完毕。

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1