cortex-A7 UART总线实验---STM32MP157

实验目的:实现字符/字符串收发

一,总线相关

1,总线:各个部件之间传输的一种媒介

芯片内部总线:核与芯片内部控制器进行连接

A7---AHB4总线---GPIO控制器

A7---AHB4总线---RCC控制器

芯片外部总线:SOC与各个外设这件连接

PC---UART总线---Target

SOC---IIC总线---温湿度传感器

SOC---SPI总线---数码管

2,串行总线 / 并行总线:

串行总线 :在同一时刻,根据时钟线的变化,数据线只能收发一位数据,优点:占用引脚资源少,缺点:收发数据比较慢

并行总线:在同一时刻可以收发多位数据,优点:传输速度比较快,缺点:占用引脚资源多

3,单工 / 半双工 / 全双工:

单工:要么发送,要么接收,只能选一个

半双工:可以收,可以发,不能同时收发

全双工:可以同时进行收发

4,同步 / 异步:

1,同步:双方通讯时,共用一个时钟源,一根时钟线

2,异步:双方通讯时,有各自的时钟源,不存在时钟线,需要配置时钟源一致

5,连接方式:

1,直连

2,USB转串口连接方式

串口电平:RS232电平

SOC:TTL电平

3,ST-LINK仿真器连接方式

ST-LINK仿真器作用:完成USB协议和串口协议之间转换

在ST-LINK仿真器,有一个芯片STM32F103,在芯片内部固化一端代码 === 完成协议之间转换

这段代码不开源,通电自动工作

二,串口通信信息(异步串行全双工总线)

1,配置信息

波特率:115200 ====1s可以收发115200bits数据

单位:bps(二进制 / 秒),比特率

8:8位数据位

N:无校验位

1:1位停止位

2,串口通讯协议

1,空闲态:总线不进行数据传输时,处于空闲态,高电平

2,起始位:通讯开始的标志,低电平

3,数据传输:收据收发,先发送低位,再发送高位

4,校验位:奇校验:数据中1个数为奇数,补0,数据中1个数为偶数,补1

偶校验:数据中1个数为奇数,补1,数据中1个数为偶数,补0

5,停止位:收发结束标志,高电平

校验时钟源:异步通讯,双方有各自的时钟源,每发一帧数据,数据都会产生误差,误差会累积,所以需要校准时钟源

三,分析电路

USART / UART:Universal synchronous/asynchronous receiver transmitter 通用同步 / 异步接收 / 发送

网络编号 === 引脚编号

UART4_TX === PG11

UART4_RX === PB2 

1,框图

cortex-A7 UART总线实验---STM32MP157_第1张图片

1,分析RCC / GPIO / UART章节

2,RCC:使能 GPIOB / GPIOG / UART4组

3,GPIO:1)设置复用功能模式,2)设置引脚对应功能

4,UART:1)初始化相关操作,2)实现数据收发

四,分析RCC章节

1,确定总线连接

A7---AHB4总线----RCC控制器 / GPIO控制器

A7---APB1总线---UART控制器

2,基地址

GPIOF:0x50008000

GPIOB:0x50003000

RCC:0x50000000

UART4:0x40010000

3,分析寄存器

1,分析RCC_MP_AHB4ENSETR寄存器

作用:使能GPIO组控制器

地址:0x50000000 + 0xA28 = 0x50000A28

伪代码:RCC_MP_AHB4ENSETR [1] = 1 === GPIOB

RCC_MP_AHB4ENSETR [6] = 1 === GPIOG

2,分析RCC_MP_APB1ENSETR寄存器

作用:使能UART组控制器

地址:0x50000000 + 0xA00 = 0x50000A00

伪代码:RCC_MP_APB1ENSETR [16] = 1

五,分析GPIO章节

1,分析GPIOx_MODER寄存器

作用:设置GPIO引脚模式为复用功能模式(输入,输出,复用,模拟)

地址:0x50003000 + 0x00 = 0x50003000 === GPIOB

0x50008000 + 0x00 = 0x50008000 === GPIOG

伪代码:GPIOB_MODER [5:4] = 01  === GPIOB

GPIOG_MODER [23:22] = 01  === GPIOG

2,分析GPIOx_AFRL寄存器

作用:设置GPIO引脚(0~7引脚)复用功能

地址:0x50003000 + 0x20 = 0x50003020

伪代码:GPIOB_AFRL [11:8] = 1000  === GPIOB

2,分析GPIOx_AFRH寄存器

作用:设置GPIO引脚(8~15引脚)复用功能

地址:0x50008000 + 0x24 = 0x50008024

伪代码:GPIOG_AFRL [15:12] = 1000  === GPIOG

六,分析UART章节

1,内部框图

cortex-A7 UART总线实验---STM32MP157_第2张图片

 2,芯片内部协议

cortex-A7 UART总线实验---STM32MP157_第3张图片

 3,发送一个字符流程

cortex-A7 UART总线实验---STM32MP157_第4张图片

 4,接收一个字符流程

cortex-A7 UART总线实验---STM32MP157_第5张图片

 5,分析寄存器

1,分析USART_CR1寄存器

作用:初始化 / 使能操作

地址:0x40010000 + 0x00 = 0x40010000

伪代码:USART_CR1[28[12] = 00 ==== 设置串口1位起始位,8位数据位

USART_CR1[15] = 0 ==== 设置串口16倍采样率,和波特率设置有关

USART_CR1[10] = 0 ==== 设置串口无校验位

USART_CR1[3] = 1 ==== 设置串口发送位使能

USART_CR1[2] = 1 ==== 设置串口接收位使能

USART_CR1[0] = 1 ==== 设置串口使能

2,分析USART_CR2寄存器

作用:设置串口停止位

地址:0x40010000 + 0x04 = 0x40010004

伪代码:USART_CR2[13:12] = 00 ==== 设置串口1位停止位

3,分析USART_BRR寄存器

作用:设置串口波特率为 115200 

地址:0x40010000 + 0x0C = 0x4001000C

伪代码:USART_BRR = 0x22B 公式:主频64MHz / 115200 = 0x22B

4,分析USART_RDR寄存器

作用:设置串口接收数据寄存器

地址:0x40010000 + 0x24 = 0x40010024

伪代码:ch = USART_RDR 

5,分析USART_TDR寄存器

作用:用来存放串口发送数据

地址:0x40010000 + 0x28 = 0x40010028

伪代码:USART_TDR = ch

6,分析USART_PRESC寄存器

作用:设置串口分频,本实验设置位不分频

地址:0x40010000 + 0x2C = 0x4001002C

伪代码:USART_PRESC [3:0] = 0000 设置位不分频

7,分析USART_ISR寄存器

作用:判断收发寄存器状态

地址:0x40010000 + 0xC0 = 0x400100C0

伪代码:

USART_ISR [7]  ==== 判断发送数据寄存器是否为空:发送寄存器满,需要等待,直到发送数据寄存器为空才可以发送下一位数据

0:发送数据寄存器满,需要等待     1:发送数据寄存器空,可以发送下一位数据

USART_ISR [6] ==== 判断一帧数据是否发送完成

0:没有发送完成,需要等待         1:发送完成,可以发送下一帧数据

USART_ISR [5] ==== 判断接收数据寄存器中是否有数据可以读

0:没有收到数据,需要等待         1:接收到数据,可以读

你可能感兴趣的:(ARM,stm32,单片机,嵌入式硬件,arm开发)