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常用指令:需要以命令的方式操作此存储器。
在这里插入图片描述

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB和STM32串口通信是指利用MATLAB软件和STM32单片机进行数据传输和通信的一种方式。串口通信是指通过串口接口上的数据线进行数据的收发和交换。 MATLAB是一种强大的科学计算软件,它具有丰富的函数库和工具箱,可以用于数据处理、信号处理、图像处理等各种科学计算任务。而STM32则是一种基于ARM Cortex-M处理器的微控制器系列,具有高性能、低功耗和丰富的外设接口,广泛应用于嵌入式系统和物联网等领域。 MATLAB和STM32串口通信一般通过串口通信协议进行数据交互。在STM32的程序中,需要配置串口的波特率、数据位、校验位和停止位等参数,以确保与MATLAB软件的通信兼容。在MATLAB中,可以利用串口通信工具箱来实现与STM32的数据传输和通信。 具体而言,MATLAB可以通过串口通信工具箱中的函数来打开串口连接,设置相关的串口参数,并发送和接收数据。STM32通过配置串口的相关寄存器和中断服务函数,实现与MATLAB的数据交互。在数据传输过程中,可以利用MATLAB的数据处理和分析功能,对接收到的数据进行各种操作和处理。 总之,MATLAB和STM32串口通信是一种常用的数据传输和通信方式,可以实现MATLAB软件和STM32单片机之间的数据共享和信息交换。通过串口通信,可以使MATLAB和STM32之间实现多种应用,如数据采集、监控控制、智能控制等。这种通信方式在科学研究、工程设计和教学实验等领域都有广泛的应用。 ### 回答2: Matlab和STM32是两种不同类型的工具,可以通过串口通信进行数据传输和交互。 Matlab是一种强大的数学计算软件,广泛应用于科学、工程和数据分析领域。Matlab提供了丰富的工具箱和函数,可以用于各种数学计算、数据处理、图像处理和控制系统设计等任务。通过Matlab,我们可以编写程序来处理数据、进行算法设计和仿真。 STM32是一款基于ARM Cortex-M内核的32位微控制器,由意法半导体(STMicroelectronics)公司生产。它具有丰富的外设和强大的计算能力,适用于各种嵌入式系统应用。STM32使用C编程语言,开发者可以编写程序控制其各种功能和外设。 串口通信是一种常见的数据传输方式,可以通过串口将数据从一个设备发送到另一个设备。在Matlab和STM32之间进行串口通信,我们可以使用Matlab的串口通信工具箱或STM32的UART(通用异步收发器)模块。 首先,我们需要在STM32上配置串口参数,如波特率、数据位数和校验位等。然后,在STM32的程序中编写代码,将要传输的数据发送到串口。同时,STM32也需要接收来自Matlab的数据,并进行处理。 在Matlab端,我们可以使用串口通信工具箱提供的函数来进行串口通信。首先,我们需要打开串口并设置与STM32相同的参数。然后,可以使用相应的函数来读取和写入串口数据。通过编写Matlab脚本,我们可以从STM32接收数据,进行数据处理和分析,并将结果发送回STM32。 通过Matlab和STM32之间的串口通信,我们可以实现数据的双向传输和实时交互。这对于开发嵌入式系统、进行实时控制和监测等应用非常有用。同时,我们可以利用Matlab强大的计算和分析能力来对数据进行处理和分析,从而实现更高级的功能。 ### 回答3: Matlab和STM32串口通信是指利用Matlab软件和STM32微控制器实现硬件设备和计算机之间的通信。串口通信是一种常见的通信方式,它通过串行接口将数据以逐位的方式进行传输。 Matlab是一种高度集成的科学计算和数值分析软件,具有强大的数据处理和可视化功能。STM32是一款基于ARM Cortex-M内核的微控制器系列,具有丰富的外设资源和多种通信接口。 在Matlab中,我们可以使用Serial对象来实现串口通信。首先,我们需要创建一个Serial对象,并指定串口的端口号和波特率。然后,我们可以使用write函数向串口发送数据,使用read函数从串口接收数据。通过这种方式,我们可以实现与STM32之间的双向数据传输。 在STM32中,我们需要配置串口的相关参数。首先,我们需要设置串口的通信参数,如波特率、数据位、停止位和校验位等。然后,我们可以使用串口发送和接收函数来进行数据的发送和接收。在发送数据时,我们需要将数据写入到串口数据寄存器,然后通过串口接口将数据发送出去。在接收数据时,我们可以从串口数据寄存器中读取数据,然后进行相应的处理。 通过Matlab和STM32串口通信,我们可以实现很多应用,例如传感器数据采集、远程控制、数据监视等。这种通信方式具有简单、可靠、实时性好等特点,适用于各种嵌入式系统和数据分析应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值