你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

物联网之STM32开发三(USART串口)

[复制链接]
STMCU 发布时间:2020-9-27 12:49
STM32-USART串口的应用内容概要:

串行通信的基本概念


串口寄存器介绍


STM32实现串口数据的收发


HAL串口库函数的使用及printf的实现


串行通信的基本概念:

内容概要:

通信的基本概念

USART介绍

串口的电路连接

串口的通信协议

同步通信和异步通信:


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


同步通信:一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,大家根据时钟信号的变化进行通信。


1_meitu_1.jpg


异步通信:是指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同布。


2_meitu_2.jpg


串行通信和并行通信的区别:


串行通信:指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。

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


3_meitu_3.jpg


                         -串行传输:数据按位顺序传输。                                                                  -并行传输:数据各个位同时传输。

                         -优点:占用引脚资源少                                                                                  -优点:速度快

                         -缺点:速度相对较慢                                                                                      -缺点:占用引脚资源多


单工、半双工、全双工:

单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机  

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

全双工:可以在同一时刻既接收,又发送。 手机


4_meitu_4.jpg


常见通信总结:


5_meitu_5.jpg


USART基本概念:


通用同步异步收发器(USART)灵活地与外部设备进行全双工数据通信,满足外部设备对工业标准NRZ异步串行数据格式的要求。USART通过小数波特率发生器提供了多种波特率。它支持同步单向通信和半双工单线通信;还支持LIN(局域互联网络),智能卡协议与IrDA(红外数据协会)SIR ENDEC规范,以及调制解调操作(CTS/RTS)。而且,它还支持多处理器通信。

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



串口电路连接:

6_meitu_6.jpg


7_meitu_7.jpg



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


8_meitu_8.jpg



9_meitu_9.jpg



串口通信协议介绍:


10_meitu_10.jpg



波特率:

在串行通信中,用“波特率”来描述数据的传输速率。所谓波特率,既每秒传送的二进制位数,其单位为bps(bits per second)。它是衡量串行数据速度快慢的重要指标。


国际上规定一个标准的波特率系列: 110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……

例如:115200bps、指每秒传送115200位。通信双方必须设置同样的同学速率才能正常通信

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



STM32 USART寄存器介绍

内容概要:

控制寄存器——USART_CR  

状态寄存器——USART_SR  

数据寄存器——USART_DR  

波特率寄存器——USART_BRR

串口寄存器-USART_CR1:

11_meitu_11.jpg



串口寄存器-USART_CR2:


12_meitu_12.jpg


                                                          13_meitu_13.jpg

串口寄存器-USART_BRR:


14_meitu_14.jpg


串口寄存器-USART_ISR:


15_meitu_15.jpg


串口数据的发送和接收:


16_meitu_16.jpg



串口寄存器-USART_TDR:


17_meitu_17.jpg



串口寄存器-USART_RDR:


18_meitu_18.jpg



STM32实现串口数据的收发

内容概要:

串口硬件原理图

CubeMX中串口的配置

串口发送一个字符

串口接收一个字符

串口硬件原理图:


19_meitu_19.jpg



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



CubeMX中串口的配置:



20_meitu_20.jpg



21_meitu_21.jpg


串口数据的发送和接收:


22_meitu_22.jpg



串口发送一个字符:



  1. void  Uart_Putchar(uint8_t ch)
  2. {
  3.         while(!(USART1->ISR &(1<<7)));   //等待发送寄存器空
  4.         USART1->TDR = ch;       //发送字符
  5. }

  6. void Uart_Putstring(uint8_t  *str)        
  7. {
  8.         while(*str != '\0')
  9.         {
  10.                 Uart_Putchar(*str);               
  11.                 str++;
  12.         }
  13. }
复制代码



串口接收一个字符:



  1. uint8_t Uart_Getchar(void)
  2. {
  3.         while(!(USART1->ISR & (1<<5)));  //等待收到一个字符的数据
  4.         
  5.         return  USART1->RDR;    //返回收到的字符
  6. }
复制代码

HAL串口库函数的使用及printf的实现

HAL库中串口的收发函数:


  1. Stm32f0xx_hal_uart.c  文件中

  2. 串口的发送函数

  3. HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

  4. 串口的接收函数

  5. HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
复制代码

printf()实现串口重定向:



  1. ​​printf函数调用的是c库中的fputc函数。因此我们如果重新写了fputc函数,就可以改变printf函数的功能,可以向串口打印输出。

  2. int fputc(int ch,FILE *f){        
  3.     while((USART1->ISR&(1<<7)) == 0);        
  4.     USART1->TDR=(uint8_t)ch;
  5.     return ch;
  6. }
复制代码







收藏 1 评论0 发布时间:2020-9-27 12:49

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版