stm32学习笔记入门篇-时钟和串口介绍以及常见串行通信接口介绍

stm32时钟系统

时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时钟系统配置步骤

在这里插入图片描述
我们在使用某个外设时,必须先使能外设时钟。

__HAL_RCC_GPIOA_CLK_ENABLE();      		/* 使能 GPIOA 时钟 
__HAL_RCC_GPIOA_CLK_DISABLE();      	/* 禁止 GPIOA 时钟 */

sys_stm32_clock_init()函数

此函数在main函数中调用,初始化时钟。
初始化时钟函数,在sys.c中定义,sys.h中实现。这个函数内部调用 HAL_RCC_OscConfig()函数和 HAL_RCC_ClockConfig()函数

HAL_RCC_OscConfig()函数设置时钟源,配置PLL

此函数在stm32f1xx_hal_rcc.c中实现。

HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
typedef struct 
{ 
	uint32_t  OscillatorType; 	   /* 选择需要配置的振荡器,这里有四个振荡器选择 */ 
	uint32_t  HSEState; 			/* HSE 状态,打开还是关闭 */ 
	uint32_t  HSEPredivValue; 		/* HSE 预分频值 */ 
	uint32_t  LSEState; 			/* LSE 状态 */ 
	uint32_t  HSIState; 	     	/* HSI状态会随着温度和电压变动而变动,不稳定 */ 
	uint32_t  HSICalibrationValue; 	/* HSI 校准值 */ 
	uint32_t  LSIState; 			/* LSI 状态 */ 
	RCC_PLLInitTypeDef  PLL; 		/* PLL() 结构体 */ 
}RCC_OscInitTypeDef;
typedef struct 
{ 
	uint32_t  PLLState; 		/* PLL 状态 */ 
	uint32_t  PLLSource; 	     /* PLL 时钟源 */ 
	uint32_t  PLLMUL; 		/* PLL 倍频系数 */ 
}RCC_PLLInitTypeDef;

HAL_RCC_ClockConfig()函数配置系统时钟源和总线分频

此函数在stm32f1xx_hal_rcc.c中实现。

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, 
uint32_t FLatency)
typedef struct 
{ 
	uint32_t  ClockType; 	/* 要配置的时钟(SYSCLK(系统时钟)/HCLK(AHB)/PCLK1(AHB1)/PCLK2(AHB2) */ 
	uint32_t  SYSCLKSource; 		/* 系统时钟源 */ 
	uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ 
	uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ 
	uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
}RCC_ClkInitTypeDef;

uint32_t FLatency /*FLatency 取值下面这三个宏定义*/
#define  FLASH_LATENCY_0   0x00000000U 				/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_0 		/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_1 		/* FLASH 2个等待周期 */

GPIO(General Purpose Input Output)通用输入输出端口

CPIO特点

1.不同型号,IO口数量可能不一样
2. 快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)
3. 每个IO口都可以做中断
4. 支持8种工作模式

STM32引脚类型

电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚

GPIO的八种模式分析

F1在输出模式,禁止使用内部上下拉
F4/F7/H7在输出模式,可以使用内部上下拉
在这里插入图片描述
开漏式输出:P_MOS管始终不导同。往ODR对应位写0,N-MOS管导通,写1则N-MOS管不导通。
特点:不能输出高电平, 必须有外部(或内部)上拉才能输出高电平。
开漏式复用输出:电路原理一样,由其他外设控制输出,如usart。
推挽输出:可输出高低电平,驱动能力强。

F1的GPIO工作模式结构图

在这里插入图片描述

GPIO寄存器介绍

IDR(输入数据存储寄存器)
在这里插入图片描述
ODR(输出数据存储寄存器)
在这里插入图片描述
BSSR
我们常常使用BSSR寄存器来操作ODR寄存器中的内容
在这里插入图片描述

通用外设驱动模型(四步法)

  1. 初始化:时钟设置、参数设置、IO设置、中断设置(开中断、设NVIC)(可选)
  2. 读函数(可选):从外设读取数据(可选)
  3. 写函数(可选):往外设写入数据(可选)
  4. 中断服务函数(可选):根据中断标志,处理外设各种中断事务(可选)

GPIO配置步骤

  1. 使能时钟:__HAL_RCC_GPIOx_CLK_ENABLE() x属于A,B,C,等
  2. 设置工作模式:HAL_GPIO_Init()
  3. 设置输出状态(可选):HAL_GPIO_WritePin() ,HAL_GPIO_TogglePin()
  4. 读取输入状态(可选):HAL_GPIO_ReadPin()

相关HAL库函数简介
在这里插入图片描述

实验:点亮LED灯、按键点亮LED灯

在这里插入图片描述
在这里插入图片描述

串口

数据通信基础

串行,并行通信

串行通信
在这里插入图片描述
并行通信
在这里插入图片描述

单工,半双工(只有一根数据线,接受和发送分时使用),全双工通信

在这里插入图片描述

同步/异步通信

在这里插入图片描述

常见串行通信接口

串口:串行通信接口,指桉位发送和接收的接口。
在这里插入图片描述

USART(通用同步异步收发器)

STMF1的USART框图

在这里插入图片描述

USART寄存器介绍(F1)

控制寄存器:CR1,CR2,CR3。
发送数据寄存器:TDR。接收数据寄存器:ROR。TDP,ROR不能直接操作,是通过操作数据寄存器DR来间接操作的。
更多有关F1USART寄存器介绍参考:
STM32F10xxx参考手册_V10(中文版).pdf,25.6.2节

数据寄存器DR
在这里插入图片描述
状态寄存器SR;
在这里插入图片描述

USART_CR1(控制寄存器1)

在这里插入图片描述
该寄存器需要完成的配置:
位13:使能USART(1:使能)
位12:配置8个数据位(0:一个起始位,8个数据位,n个停止位;1:9个数据位);
位10:禁止检验控制(1:使能校验控制)
位5:使能接收缓冲区非空中断
(1:当USART_SR中的ORE或者RXNE为’1’时,产生USART中断。 )
位3:使能发送(1:使能,0:禁止)
位2:使能接收

USART_CR2(控制寄存器2)

在这里插入图片描述

USART_CR3(控制寄存器3)

在这里插入图片描述

STMH7的USART框图

输出接口(TX)和输入接口(RX)是连接的GPIO端口。
在这里插入图片描述
在这里插入图片描述

IIC

IIC:Inter Integrated Circuit,集成电路总线,是一种同步 串行 半双工通信总线。(系统总线通信协议)

IIC协议结构图

在这里插入图片描述
① 由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空闲状态为高电平
② 总线支持多设备连接,允许多主机存在,每个设备都有一个唯一的地址
③ 连接到总线上的数目受总线的最大电容400pf限制
④ 数据传输速率:标准模式100k bit/s 快速模式400k bit/s 高速模式3.4Mbit/s

IIC协议时序

在这里插入图片描述
起始信号(S):当SCL为高电平时,SDA从高电平变为低电平
停止信号§:当SCL为高电平时,SDA从低电平变为高电平
应答信号:上拉电阻影响下SDA默认为高,而从机拉低SDA就是确认收到数据即ACK,否则NACK

AT24C02介绍

EEPROM是一种掉电后数据不丢失的储存器,常用来存储一些配置信息,在系统重新上电时就可以加载。
AT24C02是一个2K bit的EEPROM存储器,使用IIC通信方式。

在这里插入图片描述
A0/1/2: 设备地址决定引脚。
SCL:时钟线
SDA:数据线

AT24C02是由32页组成,每页8位。
在这里插入图片描述

AT24C02驱动步骤

在这里插入图片描述
AT24C02模块与各开发板引脚硬件连接说明
在这里插入图片描述
IIC驱动步骤
1、使能SCL和SDA对应时钟:__HAL_RCC_GPIOB_CLK_ENABLE()
2、设置GPIO工作模式: SDA开漏(SDA既要输入又要输出,开漏模式实现输入输出共用)/SCL推挽输出模式,使用HAL_GPIO_Init初始化
3、编写基本信号:起始信号 ,停止信号, 应答信号
4、编写读和写函数:

AT24C02驱动步骤
1、初始化IIC接口
2、编写写入/读取一个字节数据函数
3、编写连续读和连续写函数

SPI

SPI:串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线。[这里主机和从即都有SPI外设吗]
在这里插入图片描述
SPI与IIC对比

SPI结构框图介绍

在这里插入图片描述
① SPI相关引脚:MOSI(输出数据线),MISO(输入数据线),SCK(时钟),NSS(片选)。
② 数据发送和接收:与缓冲区、移位寄存器以及引脚相关
③ 时钟信号:SPI时钟信号是通过SPI_CR1寄存器配置
④ 主控制逻辑:涉及两个控制寄存器SPI_CR1/2用于配置SPI工作,SPI_SR用于查看工作状态。

STM32有三个SPI外设

在这里插入图片描述

主机模式下的数据发送与接收

在这里插入图片描述

SPI工作模式介绍

时钟极性(CPOL):没有数据传输时时钟线的空闲状态电平
时钟相位(CPHA):时钟线在第几个时钟边沿采样数据

在这里插入图片描述

SPI寄存器

在这里插入图片描述

SPI分类

  1. Standard SPI(标准SPI)全双工方式
    标准SPI,通信线包含:片选CS、时钟线CLK、输入DI、输出DO。驱动SPI FLASH还需要写保护WR以及维持HOLD引脚。
  2. Dual SPI(双线SPI) 半双工方式
    对标准SPI改进,DO和DI改成IO0和IO1,变为双向IO口。一个周期内,通过数据线,传输2位数据。
  3. Qual SPI(四线SPI) 半双工工作方式
    对Dual SPI改进,写保护WR和维持HOLD复用为数据IO口,为IO2和IO3。个周期内,通过数据线,传输4位数据。
    2,3两种方式主要是操作SPI通信协议的flash,速度至上。

NOR FLASH介绍

FLASH是常用的用于储存数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存的特性。FLASH是有一个物理特性:只能写0,不能写1,写1靠擦除
NM25Q128,串行闪存器件,属于NOR FLASH中的一种,容量为128 Mb。擦写周期可达10W次,可以将数据保存达20年之久。使用SPI数据传输时序。
NM25Q128芯片接口示意图

在这里插入图片描述

CS : 片选信号输入
SI : 数据输入
SO : 数据输出 
CLK : 时钟输入
HOLD : 暂停通讯 
WP : 写保护功能

NM25Q128存储结构
在这里插入图片描述
NM25Q128常用指令:需要以命令的方式操作此存储器。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值