打印
[应用相关]

STM32之串口通信

[复制链接]
1003|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、RS232通信协议
1、概念  
  个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口。

使用特权

评论回复
沙发
parameters|  楼主 | 2019-7-22 14:54 | 只看该作者
2、电气特性

  逻辑1(MARK):  -3V~-15V

  逻辑0(SPACE):  +3~+15V

使用特权

评论回复
板凳
parameters|  楼主 | 2019-7-22 14:54 | 只看该作者
3、接口

  实现全双工异步通信只需要三根线:RX、TX和GND。

使用特权

评论回复
地板
parameters|  楼主 | 2019-7-22 14:54 | 只看该作者
二、常见COMS电平转RS232电平的芯片--MAX3232

使用特权

评论回复
5
parameters|  楼主 | 2019-7-22 14:55 | 只看该作者
1、逻辑输入与逻辑输出特性

使用特权

评论回复
6
parameters|  楼主 | 2019-7-22 14:55 | 只看该作者
2、RS232接口端输入特性

使用特权

评论回复
7
parameters|  楼主 | 2019-7-22 14:55 | 只看该作者
3、RS232接口端输出特性

使用特权

评论回复
8
parameters|  楼主 | 2019-7-22 14:56 | 只看该作者
三、STM32串口硬件电路

1、芯片内部串口电路

使用特权

评论回复
9
parameters|  楼主 | 2019-7-22 14:56 | 只看该作者
2、开发板串口硬件电路

使用特权

评论回复
10
parameters|  楼主 | 2019-7-22 14:56 | 只看该作者
四、STM32串口编程

1、整体流程

① 开启GPIO时钟和USARTX时钟

② 配置TX和RX引脚

③ 初始化USART控制器

使用特权

评论回复
11
parameters|  楼主 | 2019-7-22 14:57 | 只看该作者
2、细节实现

① 开启GPIO时钟和USARTX时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);



② 配置TX和RX引脚
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
   
        /* Configure USART1 Rx (PA.10) as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


③ 初始化USART控制器
/* USART1 mode config */
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
        USART_Cmd(USART1, ENABLE);

使用特权

评论回复
12
parameters|  楼主 | 2019-7-22 14:59 | 只看该作者
五、STM32串口疑惑

1、串口时钟使能与控制器使能的关系

  为何USART时钟使能了,还需要在配置USART控制器的时候再使能一次?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
USART_Cmd(USART1, ENABLE);

1> USART的时钟使能

  APB2 peripheral clock enable register  (RCC_APB2ENR)



2> USART控制器使能

  USART Control register 1(USART_CR1)



3> 原因

  

RCC_APB2ENR:  控制APB2时钟是否供应给USART控制器

USART_CR1:   控制USART控制器的分频器和输出是否工作

使用特权

评论回复
13
parameters|  楼主 | 2019-7-22 14:59 | 只看该作者
2、TDR与RDR共用一个特殊功能寄存器地址

USART_DR功能描述:

  包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR) ,一个给接收用(RDR) ,该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口(参见图236 )。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。(摘自《STM32参考手册》)

  笔者的理解是:当对USART_DR进行读操作的时候,访问的是RDR;当对USART_DR进行写操作的时候,访问的是TDR。

使用特权

评论回复
14
parameters|  楼主 | 2019-7-22 14:59 | 只看该作者
六、串口调试时需要注意的地方

1、通过MDK结合一些调试器可以单步、任意断点等等方式进行代码的调试。可是,这种调试方法对于调试操作系统,比如uCOS-II,还有那些必须要全速运行才能进行调试的情况,就显得力不从心。串口调试正是用于这些地方,可以在程序全速运行的情况下,实时的打印系统的运行信息。

2、串口调试也有它的局限性,由于串口的波特率相对于STM32这样高速运行的单片机显得迟钝,很多情况下不能及时的打印系统的运行信息。甚至有些情况下,我们原本那些串口调试的代码会成为影响我们系统实时性最主要的因素。

使用特权

评论回复
15
parameters|  楼主 | 2019-7-22 15:00 | 只看该作者
参考资料:《STM32库开发实战指南》

       《STM32芯片手册》

使用特权

评论回复
16
wakayi| | 2019-8-12 11:42 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
17
wowu| | 2019-8-12 11:46 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
18
xiaoqizi| | 2019-8-12 11:58 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
19
yaweq| | 2019-8-12 17:42 | 只看该作者
MARK一下,准备学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

361

帖子

0

粉丝