
stm32标准库入门教程
文章平均质量分 88
stm32标准库入门教程
浅陌pa
这个作者很懒,什么都没留下…
展开
-
28:CAN总线入门一:CAN的基本介绍
CAN总线是一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。两根通信线(CAN_H、CAN_L),线路少差分信号通信,抗干扰能力强高速CAN(ISO11898):125k~1Mbps,原创 2025-01-17 19:51:44 · 1337 阅读 · 0 评论 -
27:内部flash闪存的操作
STM32F1系列的flash闪存(掉电不丢失)包含:①程序存储器flash(存储编译好的程序),地址是以0x0800 0000开始。②系统存储器(存储BootLoader程序,不允许修改),地址以0x1FFF F000开始。③选项字节(存储配置参数)三个部分,地址以0x1FFF F800开始通过闪存存储器接口(外设)可以对程序存储器flash和选项字节进行擦除和编程。读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据。原创 2024-09-29 16:35:08 · 1223 阅读 · 0 评论 -
26:WDG看门狗
1、看门狗的作用是监控程序的运行状态。当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。2、看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时(即程序卡死,没有执行到重置计数器的代码),看门狗硬件电路就自动产生复位信号。3、STM32中内置了2个看门狗:独立看门狗(IWDG):独立工作,对时间精度要求较低。窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。原创 2024-09-28 14:43:49 · 884 阅读 · 0 评论 -
25:stm32的低功耗模式
若使用WFI进入睡眠模式,唤醒条件是任意的中断,那唤醒时会接入中断,执行中断服务函数。如使用WFE进入睡眠模式,唤醒条件是事件,可以是外部中断配置为事件模式,也可以是使能中断未配置NVIC。PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能,这里我们只学习低功耗模式的功能,①VDDA供电区域为模拟供电区域,由VDDA供电,VREF为A/D转换器的参考电压供电脚。主要是给A/D转换器,复位模块,PLL供电,供电电压为2.4v。3、NRST引脚上的外部复位(复位键);原创 2024-09-26 10:13:13 · 683 阅读 · 0 评论 -
24:RTC实时时钟
1、备份寄存器,用于存储数据,当VDD电源被切断时,这个备份寄存器由VBAT维持供电。如果VBAT电源也被切断,那么里面的数据就会被清除。当系统在待机模式下被唤醒,或系统复位或电源复位时,也不会被复位。2、TAMPER引脚产生的侵入事件将所有备份寄存器内容清除3、用户数据存储容量:20字节r(中容量和小容量)/84字节(大容量和互联型)原创 2024-09-20 11:21:37 · 748 阅读 · 0 评论 -
23:SPI二:W25Q64存储器模块的使用
其中最主要的特点就是掉电不丢失。由上图所示:W25Qxx的地址是24位的,则代表地址总线是24根地址总线。一个地址则代表一个门牌号,一个门牌号的存储空间是一个字节,那么24位的地址一共有多少个字节?地址0x000 000(24位)~0xFFF FFF这之间一共有2^24(16777216)个地址数。则一共有16777216个字节。我们换算一下:16777216B = 16384KB = 16MB。所以24位地址总线的存储空间是16MB。原创 2024-09-20 11:18:35 · 1779 阅读 · 0 评论 -
22:SPI一:简单的使用
SPI是一种同步的,全双工,支持总线挂载多设备的通信协议。它特别适用于高效,快速的传输。如上图所示:单片机作为主机,其他模块作为从机。通过SPI总线进行数据通信,而SPI总线如上图结构。SPI由4条线组成:MOSI,MISO,SCK,NSS。MOSI:主机输出从机输入(主机发送从机接收,发送数据时高位先行),在进行数据传输时,主机的MOSI和所有从机的MOSI连接在一起。MISO:主机输入从机输出(主机接收从机发送),在进行数据传输时,主机的MISO和所有从机的MISO连接在一起。SCK。原创 2024-09-18 15:42:10 · 859 阅读 · 0 评论 -
21:I2C三:MPU6050的使用
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景。原创 2024-09-15 13:42:34 · 2756 阅读 · 1 评论 -
20:I2C二:I2C片上外设的使用
如图:I2C片上外设挂载在APB1总线上面,并且I2C1由复用重映射,I2C2没有重映射。SR1:状态寄存器1SR2:状态寄存器2CR:控制寄存器2、主机向从机发送一个字节数据与之相关的标准库编程接口:如上图:主机发生起始信号/数据,都会产生一个事件(多个标志位混合而成),我们控制判断这些事件是否产生,来判断是否需要进行下一步。EV5事件:SR1状态寄存器中的SB(起始信号发生成功标志位)置1,代表发生成功。EV6事件:SR1状态寄存器中的ADDR(寻址标志位)置1,代表原创 2024-08-19 11:44:53 · 1167 阅读 · 0 评论 -
19:I2C一:程序模拟I2C通信时序
I2C通信协议和串口通信USART不同,USART是异步,全双工的通信协议。而I2C通信协议是一种同步,半双工,带数据应答,支持总线挂载多设备的通信协议。USART传输数据的时候是先传输数据帧的低位,在传高位。而I2C传输数据的时候是高位先行。由上图所示:有2条总线,数据总线SDA和时钟总线SCL。其中时钟线SCL只能由主机控制,而SDA主机和从机都可以控制。当主机向从机发送。原创 2024-09-12 15:32:47 · 1989 阅读 · 0 评论 -
18:(标准库)DMA二:DMA+串口收发数据
如上图所示:UART1的Tx发送请求使用DMA1的通道4,UART1的Rx接收数据请求使用DMA1的通道5。申请数据搬运,DMA1将缓冲区的数据搬运到TDR数据寄存器中,然后串口将数据发送出去。申请数据搬运,DMA1将数据从RDR寄存器中搬运到缓冲区中。:当UART1的发送数据寄存器TDR中没有数据时,就会向。:当UART1的接收数据寄存器RDR中有数据时,就会向。原创 2024-11-26 20:45:08 · 1538 阅读 · 1 评论 -
17:(标准库)DMA一:DMA数据搬运
DMA是直接存储器存取,它可以提供外设寄存器和存储器,存储器与存储器之间的高速数据的传输,无需CPU的干预,这样节省了CPU的资源。简单来说DMA就是数据的搬运工。STM32中的存储器:DMA的3种搬运方式:1.存储器------>存储器(数据的拷贝)2.存储器------>外设(将某数据写入串口寄存器TDR)3.外设--------->存储器(将串口接收寄存器RDR的数据搬运到内存,避免数据的覆盖)原创 2024-09-03 18:46:18 · 1937 阅读 · 0 评论 -
16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗
ADC的触发方式有很多,一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。使用定时器的PWM模式触发,每隔1s触发一次,因为定时器的定时器周期配置的为1s。原创 2024-11-24 20:13:42 · 801 阅读 · 2 评论 -
15:(标准库)ADC二:ADC内部通道的使用
在之前的代码中参考电压都是使用的是3.3v,因为参考电压引脚VREF连接着内部供电电压VDDA,而VDDA连接着VDD,而VDD是3.3v。但是在实际的使用中,VDDA的会随着使用的片上外设增加而减小,所以参考电压也会改变,而不一直是3.3v。可以通过内部通道17测量出实际的参考电压的值。综上:若没有使用校准的参考电压时:即3.3v,测量出的温度传感器的内部电压为1.45v,计算出的温度为21度。而使用了校准的参考电压,即3.25v,测量出的温度传感器的内部电压为1.43v,算出的温度为25度。原创 2024-11-24 14:27:35 · 1302 阅读 · 0 评论 -
14:(标准库)ADC一:ADC模数转换器
ADC就是一个模数转换器,将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。说的直观一点就是一个电压表,用于测量电压的片上外设。其中转换电压的范围0~3.3v。其中这些传感器在有外界的刺激的情况下,将会改变自身电阻的大小(如下图N1电阻),进而改变输出电压的大小。而电压的大小通过模拟输出口AO口输出。单片机可以通过ADC获取外部模块的电压值,进而做出一些动作。那么单片机是怎样通过ADC进行对外部电压的测量并转换为数字量保存在内存中喃?原创 2024-09-02 20:18:25 · 2158 阅读 · 0 评论 -
13:(标准库)串口通信二:使用USART发送/接收数据包
我们使用上位机个单片机发送数据包时,规定包头和包尾,将我们需要发送的数据,放在中间,数据的长度我们也可以之间规定。一般情况下HEX数据包我们使用固定长度数据包。二文本数据包使用是可变长度数据包。原创 2024-09-09 15:33:30 · 1092 阅读 · 0 评论 -
12:(标准库)串口通信一:使用USART发送/接收数据
通过串口接收/发送数据。其中串口拥有TX(发送数据)和RX(接收数据)引脚。2个设备通过串口接收/发送数据时,这2个引脚需要交替连接。串口接收/发送的数据是以数据帧进行传输的,那什么是数据帧呢?数据帧 = 起始位+数据位+停止位。起始位是低电平0,停止位是高电平1,而数据位可以是8位/9位。其中数据位中还包含1位校验位(有程序员自己规定)。而传输的时候是先传输数据帧的低位,在传高位。数据进行传输时,如果不是连续传输时,则2个数据帧之间还有空闲位,它为高电平。原创 2024-08-12 15:21:34 · 1991 阅读 · 0 评论 -
11:(标准库)定时器六:定时器的编码器接口
在前面章节中使用外部中断进行编码器计次中使用到了编码器。当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。编码器有2个输出口分别为A口和B口。正向转动:A口输出的波形提前B口输出波形90°反向转动:A口输出的波形延后B口输出波形90°当编码器扭动一下,则产生一个状态。例如正向扭动一下,则产生A相。↑,B相低电平。在扭动一下,则产生A相高电平,B相↑。若持续的扭动,则产生的波形交替下去。而通用定时器和高级定时器中有编码器接口。原创 2024-11-13 20:16:07 · 1075 阅读 · 0 评论 -
10:(标准库)定时器五:输入捕获从模式/PWMI模式
【代码】14:定时器五:输入捕获(补)原创 2024-08-28 14:56:23 · 537 阅读 · 0 评论 -
09:(标准库)定时器四:输入捕获
定时器通过通道捕获输入电平的变化,而通道有CH1~CH4,这4个通道。我们设定对通道CH3的输入电平进行捕获。假如CH3突然捕获到一个上升沿,然后CRR3对计数器CNT进行拍照,记录此时计数器的数值为R1,CNT的值会被拍照 入CCR3中。然后过一段时间,CH3捕获到一个下降沿,然后CRR3对计数器CNT进行拍照,记录此时计数器的数值为R2,CNT的值会被拍照 入CCR3中。而通过R2-R1就可以计算出这个电平的时间。原创 2024-08-24 09:58:41 · 1195 阅读 · 0 评论 -
08:(标准库)定时器三:输出比较
通过CCR里面的值和计数器CNT里面的值进行比较,然后输出高电平/单片机,进而产生需要的信号。如上图所示,预分频器71,则最小单元为1us,自动重装器为999,则周期为1ms,我们设定CCR的值为299,规定CCRCNT时,输出低电平。则输出比较器就会输出周期为1ms,高电平为0.3ms,低电平为0.7ms的波形,即占空比为30%的PWM波形。总结:波形周期 = 由预分频器和自动重装器决定。原创 2024-08-24 11:19:22 · 672 阅读 · 0 评论 -
07:(标准库)定时器二:时钟来源/定时器中断再次使用
对射式红外传感器,有遮挡D0引脚输出高电平,没有遮挡D0引脚输出低电平,①Timer.c文件的程序。②Timer.h文件的程序。原创 2024-08-26 19:53:24 · 673 阅读 · 0 评论 -
06:(标准库)定时器一:时基单元
定时器是一种专门负责定时功能的片上外设,而F1系列的单片机最多由14个定时器(TIM1~TIM14)。而STM32F103C8T6一共只有4个定时器。如上图所示:STM32F103C8T6有一个高级定时器TIM1,3个通用定时器TIM2~4。而高级定时器TIM1挂载在APB2上面。原创 2024-08-21 16:00:52 · 2023 阅读 · 0 评论 -
05:(标准库)时钟树
由我们前面写的的代码可知,我们每次使用片上外设都需要先打开片上外设的时钟,这样才能使用片上外设。如下图所示。那么为什么会是这样喃?我们查看一下时钟树的样子:如下图所示:左边的是时钟大树,右边的是时钟小树。如图:APB2/APB2/AHB分配器上面都连接的不同的片上外设,在使用某个片上外设是,我们打开连接的分频器,然后给他提供被处理过的脉冲波形。原创 2024-08-18 14:52:42 · 1923 阅读 · 0 评论 -
04:(标准库)使用外部中断按键控制LED/编码器计次
外部中断控制器,能够检测外部输入信号的变化边沿并由此产生中断。通过检测上升沿或者下降沿来产生中断源。旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。没有旋转时,AB引脚都输出高电平。旋转时,AB 引脚输出相位不同的方波。如果是顺时针旋转:则B引脚下降沿时,A引脚为低电平。如果是逆时针旋转:则A引脚下降沿时,B引脚为低电平。/*旋转编码器的B连接单片机的PB1,A连接单片机的PB0*/原创 2024-08-09 19:47:58 · 938 阅读 · 0 评论 -
03:(标准库)OLED模块的简单使用
OLED驱动函数是使用B站UP江科大的。我们直接调用即可,是使用软件模拟I2C协议进行通信的。具体的I2C协议可查看上官嵌入式开发中的C51单片机开发。链接:https://pan.baidu.com/s/1Ok9gvo5dDA-XurpRc8Et0g?可见模块的SCL连接着单片机的PB8引脚,SDA连接着PB9引脚,如果我们需要改引脚,直接在着函数里面改。我们在Keil软件里面创建一个OLED组,然后将这3个文件添加进去即可。驱动函数文件:通过百度网盘分享的文件:程序源码.zip。原创 2024-08-09 09:44:19 · 577 阅读 · 0 评论 -
02:(标准库)LED闪烁/LED流水灯/蜂鸣器/按键控制LED
首先,我们想象一下,让LED灯点亮,引脚应该是输出模式,那么应该是通用模式,还是复用模式喃?所以我们先创建一个GPIO_InitTypeDef类型的结构体变量,变量名为GPIO_InitStruct,我们将结构体中的3个元素按我们是需求取值。我们通过检测按钮是否按下,来控制LED灯的状态。所以按钮连接的IO引脚应该配位输入模式,一般情况下,我们的输入模式配置为。一般选择开漏模式,当输出0时,LED点亮,输出1时,LED熄灭。,所以我们使用这个片上外设时,需要先开启这个外设的时钟,更多信息在时钟树那一节。原创 2024-08-05 20:20:06 · 1534 阅读 · 0 评论 -
01:标准库工程模板的创建
【stm32】工程模板的创建。原创 2024-08-03 19:48:10 · 922 阅读 · 0 评论