- 博客(95)
- 资源 (1)
- 收藏
- 关注
原创 STM32(hal库)的msp初始化HAL_TIM_Base_MspInit有什么用?为什么单独设置这个,而不是在timer_init()函数里直接初始化?
在STM32HAL库中,函数是一个与定时器(TIM)相关的底层初始化函数,其名称中的 "Msp" 代表 MCU Service Package(微控制器服务包),这是HAL库的一部分,用于处理与特定硬件外设相关的底层初始化(如GPIO配置、NVIC中断配置、DMA配置等)。
2024-11-03 14:13:06 143
原创 STM32(hal库)中的TIM_HandleTypeDef的结构体是什么?
TIM_HandleTypeDef是 STM32 HAL(硬件抽象层)库中用于定时器(TIM)操作的一个结构体。它封装了定时器相关的配置信息和控制参数,使得用户可以通过HAL库提供的API函数方便地进行定时器的初始化、启动、停止以及中断处理等操作。下面是对。
2024-11-03 13:51:20 323
原创 STM32中ARR(自动重装寄存器)为什么要减1
在STM32定时器的配置中,ARR(自动重装载寄存器)需要减1的原因主要与定时器的计数方式和寄存器的设置方式有关。
2024-11-02 07:00:00 246
原创 STM32的定时器的相关的寄存器有哪些?
综上所述,STM32的定时器相关的寄存器种类繁多,功能各异。通过合理配置这些寄存器,可以实现定时器的各种功能,如定时、计数、输入捕获、输出比较等。在实际应用中,需要根据具体需求进行寄存器配置和编程。
2024-11-01 20:38:38 808
原创 STM32滴答时钟是否每次计时1ms都要中断一下,更新ms数
滴答时钟(SysTick)在STM32中确实被配置为每1ms产生一次中断,但这并不意味着每次计时1ms都必须中断以更新毫秒数。不过,在标准的配置和使用方式下,SysTick定时器确实是以这种方式工作的。
2024-11-01 11:02:49 416
原创 STM32在进行hal_init()函数后,systick自动配置为1ms的时钟,在程序中哪里需要这个滴答时钟?如果没有使用延时,这个自动配置1ms是否会频繁进入中断,影响主程序运行?
如果你确定你的应用程序中没有使用到上述任何需要SysTick中断的功能,并且你也没有调用任何依赖于SysTick的HAL库函数(包括延时函数),那么理论上你可以禁用SysTick中断或者将其配置为更长的时间间隔。因此,如果你的应用程序对性能有严格要求,并且你确定不需要SysTick中断,你可以考虑禁用它或将其配置为更长的时间间隔。如果你决定保留SysTick中断,但担心其影响,你可以通过优化ISR代码来减少其执行时间,或者使用更高级的时间管理策略(如基于硬件定时器的时间切片)来分配CPU时间。
2024-11-01 11:00:56 211
原创 STM32(hal库)中,系统滴答时钟(Systick)频繁进入中断(默认1ms一次),是否会频繁进入中断,影响主程序的运行?
首先,需要明确的是,SysTick中断是一个硬件级别的中断,它会在每个设定的时间间隔内触发,从而打断主程序的执行流程。对于SysTick中断来说,由于其触发频率较高(每1ms一次),如果中断服务程序的处理时间较长或者中断服务程序内部存在复杂的计算或IO操作,那么就有可能导致主程序的执行被频繁打断,从而影响系统的整体性能和实时性。虽然SysTick中断的频繁触发可能会对主程序的运行产生一定影响,但通过合理的优化和配置,可以最大程度地减轻这种影响,确保系统的稳定性和性能。在STM32(HAL库)中,
2024-11-01 10:58:15 319
原创 STM32(hal库)中Systick是如何默认进行计时1ms的?
Systick是一个24位的倒计数定时器,当计数到0时,会从RELOAD寄存器中自动重装载定时初值,并产生一个SysTick中断(如果使能了中断)。Systick的寄存器包括CTRL、LOAD、VAL和CALIB,其中LOAD寄存器用于设置定时初值,VAL寄存器显示当前计数值,CTRL寄存器用于控制Systick的使能和时钟源等。
2024-11-01 07:00:00 323
原创 STM32的Hal库中 Systick是在哪里进行初始化的?
Systick的初始化过程涉及多个函数调用,从main()函数中的HAL_Init()开始,经过HAL_InitTick()和HAL_SYSTICK_Config(),最终完成Systick的配置。此外,为了确保Systick的时钟源稳定,可能还需要调用SystemClock_Config()函数来配置系统时钟。在STM32的HAL库中,Systick的初始化通常发生在几个关键的函数调用过程中。
2024-10-31 20:20:47 290
原创 STM32的SysTick都包括哪些寄存器?
SysTick定时器是STM32微控制器内核中的一个特殊定时器,用于提供系统级的定时服务。它是一个24位的递减计数器,具有自动重载值寄存器的功能,可以生成精确的延时、定时中断以及进行周期定时操作。SysTick定时器因其简单性和内置性,在STM32微控制器中得到了广泛应用。
2024-10-31 18:41:46 1151
原创 STM32的hal库在实现延时函数(例如:Delay_ms 等)为什么用滴答定时(Systick)而不是定时器定时中断,也不是RTC?
在HAL库中,延时函数(如HAL_Delay)通常是通过配置Systick定时器来实现的。HAL库提供了相关的API函数来初始化Systick定时器、设置重装载值以及实现延时功能。这些API函数简化了Systick定时器的配置和使用过程,使得开发者能够更加方便地实现延时功能。STM32的HAL库在实现延时函数时选择使用Systick定时器是出于其集成在NVIC中、配置简单、低功耗和高效性等方面的考虑。这些优势使得Systick定时器成为实现基本延时功能的理想选择。
2024-10-30 15:20:18 453
原创 STM32中的__HAL_RCC_GPIOA_CLK_ENABLE(); 这个为什么和普通的库函数不一样,前面有两个下划线?
这是因为在C和C++编程中,通常建议避免使用以下划线开头的标识符,特别是以下划线加一个大写字母开头的标识符,因为这些标识符可能会被编译器或标准库保留使用。:由于这些函数或宏与HAL库的内部实现紧密相关,并且可能直接操作硬件寄存器,因此它们不是标准的C或C++函数。这意味着它们的行为可能不是完全由C或C++语言规范定义的,而是由STM32的硬件特性和HAL库的设计决定的。这样的函数名前面的双下划线表示这是一个特殊的、底层或内部使用的函数或宏,它直接操作硬件或与HAL库的内部机制紧密相关。
2024-10-29 19:36:34 536
原创 STM32中的IPR,IRQ,NVCC ,EXTI,AFIO 都是什么意思?
综上所述,IPR、IRQ、NVIC、EXTI、AFIO在STM32微控制器中各自扮演着重要的角色,它们共同协作实现了中断管理、外部事件响应和引脚复用等功能。
2024-10-29 06:00:00 584
原创 为什么有的说法是STM32有60个外部中断,有的说法是有23个中断
综上所述,60个外部中断的说法可能源于对STM32中断系统的整体理解,而23个外部中断的说法则更加具体地指向了EXTI模块所管理的中断/事件线。在实际应用中,应根据具体需求和场景来选择合适的中断源和配置方式。同时,了解STM32的中断系统和EXTI模块的工作原理对于正确配置和使用外部中断至关重要。
2024-10-28 15:14:52 327
原创 STM32的hal库中,后缀带ex和不带的有什么区别
在HAL(硬件抽象层)库中,后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。
2024-10-28 10:28:45 512
原创 为什么STM32的标准库是直接使用系统默认配置的时钟SystemInit() 而hal库需要单独写一个文件sys.c来单独配置时钟?
STM32标准库直接使用函数进行默认时钟配置,是为了提供一个简单快速的初始化过程;而HAL库则需要开发者单独编写时钟配置文件,以实现更灵活、更精确的时钟配置。这种差异反映了两者在设计理念和使用方式上的不同。在实际开发中,开发者应根据具体的应用需求和项目要求选择合适的库和配置方式。
2024-10-28 09:45:22 412
原创 stm32的boot引脚接线
STM32微控制器具有两种启动模式:用户模式和系统模式。用户模式:这是默认启动模式。在此模式下,BOOT0引脚连接到VDD(高电平),BOOT1引脚可以用作通用输入或保持默认状态(低电平)。程序将从主Flash或外部存储器启动。系统模式:在此模式下,BOOT0引脚仍然连接到VDD(高电平),但BOOT1引脚需要设置为所需状态(高电平或低电平)以从特定存储器中加载程序。系统模式下的启动顺序由内置的引导加载程序决定。STM32微控制器中的BOOT0和BOOT1引脚是控制启动模式和引导加载程序的关键引脚。
2024-10-27 21:03:42 608
原创 为什么STM32在构建工程时候,没有用到core_cm3.c 只用到了core_cm3.h?
目录为什么STM32在构建工程时候,没有用到core_cm3.c 只用到了core_cm3.h?STM32在构建工程时,可能只用到core_cm3.h而没有直接用到core_cm3.c的原因,可以从以下几个方面来解释:core_cm3.h:core_cm3.c:头文件引用:库文件链接:自定义实现:固件库版本差异:STM32在构建工程时只用到core_cm3.h而没有直接用到core_cm3.c的原因,主要是因为core_cm3.c的底层实现代码通常已经被编译成库文件并集成到工程中。开发者通过包含core_c
2024-10-27 21:01:38 413
原创 STM32(二十二):FLASH闪存
STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据通过在程序中编程(IAP),实现程序的自我更新在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序。
2024-10-25 16:06:38 805
原创 STM32(二十一):看门狗
WDG(Watchdog)看门狗,手动重装寄存器的操作就是喂狗。看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号。STM32内置两个看门狗:独立看门狗(IWDG):独立工作,对时间精度要求较低。窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。I。
2024-10-23 16:59:14 823
原创 .\Objects\Project.axf: error: L6002U: Could not open file .\objects\core_cm3.o: No such file or dire
无损解决.\Objects\Project.axf: error: L6002U: Could not open file .\objects\core_cm3.o: No such file or directoryFinished: 0 information, 0 warning, 0 error and 1 fatal error messages.
2024-10-17 19:57:34 234
原创 STM32(二十):PWR电源控制
停机模式:关闭所有1.8V区域的时钟,CPU和外设均不能运行,定时器在定时的会暂停,串口收发数据也会暂停,不过由于没关闭电源,CPU和寄存器数据都是维持原状的。低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间。执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行。执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行。
2024-10-17 19:52:20 990
原创 STM32(十八):实时时钟
Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒。时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量。世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间。GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准。
2024-10-12 11:09:06 804
原创 STM32(十八):SPI通信
W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景存储介质:Nor Flash(闪存)时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)存储容量(24位地址):64KB为1块,一共128块。每一块分为多个扇区Sector,每个扇区为4KB,每块一共是16个扇区。xxx000-xxxFFF.一页内的地址变化范围是xxxx00,到xxxxFF。写入操作前,必须先进行写使能。
2024-10-09 14:08:46 850
原创 STM32(十七):I2C通信外设
为了产生一个起始条件,STM32需要写入控制寄存器,CR1中START位写1,就可以产生起始条件,起始条件发出后,可以由硬件清除。控制完硬件之后,就要检查标志位,看有没有达到我们想要的状态。接收时候,数据移位级寄存器移动到数据寄存器,置状态标志位RXNE 1,表示接收寄存器非空。STM32内部集成了硬件I2C收发电路(USART是串口通信的硬件收发电路),可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,可以看到,只要使用这个函数,都会对SR2进行访问,也就满足了清除条件,完美!
2024-09-22 00:10:09 396
原创 STM32(十六):MPU6050简介
先使能自测,读取数据,再失能自测,读取数据。MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景。陀螺仪满量程选择: ±250、±500、±1000、±2000(°/sec)度每秒。3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度。3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度。加速度计满量程选择:±2、±4、±8、±16(g)重力加速度。
2024-09-20 21:39:11 623
原创 STM32(十五):I2C通信
I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线,实现单片机读写外部模块寄存器的功能。两根通信线:SCL(Serial Clock)、SDA(Serial Data)同步,半双工 :同步时序可以极大程度降低对硬件电路的依赖。带数据应答支持总线挂载多设备(一主多从、多主多从)
2024-09-17 16:18:59 1104
原创 STM32(十四):USART串口数据包
0xFF包头,0xFE包尾。如果数据和包头包尾重复,可能会引起误判。解决办法:1. 限制载荷数据的范围2. 如果无法避免载荷数据和包头包尾重复,就使用尽量使用固定长度数据包。@包头 ‘\r\n' 包尾 在载荷数据中间可以出现包头包尾的任意字符。
2024-09-15 21:45:43 193
原创 STM32(十三):通信协议——USART串口协议
将一个设备的数据传送到另一个设备,扩展硬件系统。制定通信的规则,通信双方按照协议规则进行数据收发。TX (Transmit exchange) 数据发送角 RX (Receive exchange) 数据接收角SCL (Serial Clock) 时钟 SDA (Serial Data)数据SCLK (Serial Clock) 时钟 MOSI (Master Output Slave Input)主机输出数据脚。
2024-09-15 09:40:05 1033
原创 STM32(十二):DMA直接存储器存取
DMA请求就是DMA的硬件触发源,比如ADC转换完成,串口接收到数据,需要触发DMA转运数据的时候,就会通过DMA向硬件触发信号,之后DMA就可以执行数据转运的工作了。M2M存储器到存储器的意思,当给M2M位为1时,DMA就会选择软件触发,这里软件触发是以最快的速度,连续不断的触发DMA,争取早日把传输计数器清零,完成这一轮转换。传输计数器是自减计数器,每转运一次,计数器的值减1,减到0转运定制,之前自增的地址也会恢复到起始的位置。DMA内部的多个通道可以独立的数据转运,AHB中设备用于配置DMA参数。
2024-09-08 23:07:29 1346
原创 STM32(十一):ADC数模转换器实验
1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。2.配置GPIO,把GPIO配置成模拟输入的模式。3.配置多路开关,把左面通道接入到右面规则组列表里。4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。5.ADC_CMD 开启ADC。void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); 配置ADC分频器,对APB2的时钟进行分频。void ADC_ITConfig(ADC_
2024-09-08 10:49:26 332
原创 STM32(十):ADC模数转换器
ADC可以将引脚上连续变化的转换为内存中存储的,建立模拟电路到数字电路的桥梁。12位逐次逼近型ADC,1us转换时间,分辨率:0~2^12-1输入电压范围:0~3.3V,转换结果范围:0~409518个输入通道,可测量16个外部(16个GPIO口)和2个内部信号源(内部温度传感器和内部参考电压1.2v基准电压)规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围。
2024-09-05 23:23:37 735
原创 STM32(九):定时器——TIM编码器接口
在输入捕获的使用中,边沿检测和极性选择是选择上升沿还是下降沿,但是编码器接口要求上升沿和下降沿都需要计次,所以在编码器接口的极性选择中,就不是边沿的极性选择了,而是高低电平的极性选择了,如果选择上升沿的参数,那么信号直通过去,不进行高低电平信号的翻转;编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度。定时器接了编码器之后,这个定时器就干不了其他的了。出现上表,CNT计数自增,出现下表,CNT计数自减。
2024-09-05 08:30:04 443
原创 STM32(八):定时器——输入捕获实验
用于指定输入捕获触发信号源通过复用映射连接到对应通道的输入捕获引脚的方式。具体来说,当选择TIM_ICSelection_IndirectTI时,输入捕获触发信号需要经过复用映射电路,然后再由复用映射电路将信号传递给定时器的输入捕获电路。假设有一个STM32微控制器,它拥有多个定时器输入捕获通道(如IC1、IC2、IC3、IC4)和多个定时器输入通道(如TI1、TI2、TI3、TI4)。实际上是对ICx捕获电路进行的配置,而不是对TIM_CHx输入口进行的配置。7. 开启定时器,TIM_CMD。
2024-08-28 14:10:59 810
原创 STM32(七):定时器——输入捕获
右边其实有两套滤波和边沿检测电路,第一套电路经过滤波和极性选择得到TI1FP1(TI1 Filter Polarity 1),输入给通道1。输出比较引脚数输出端口,输入捕获引脚数输入端口。输出比较是根据CCR和CNT的大小关系来执行输出动作。输入捕获是接受到输入信号,执行CNT锁存到CCR的动作。输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于。每个高级定时器和通用定时器都拥有4个输入捕获通道。可配置为PWMI模式,同时测量频率和占空比。
2024-08-25 23:46:05 468
原创 STM32(六):定时器——输出比较实验
SWJ是SWD和JTAG两种调试方式,NOJTRST意思是接触JTRST引脚的复用,根据引脚定义表,JTRST引脚也就是PB4,如果使用这个参数,PB4就变成正常的GPIO口了,上图其他四个还是调试端口,不能当作GPIO来使用。对于普通的开漏推挽输出,引脚的控制权来自于输出寄存器的,如果想让定时器来控制引脚,那就需要使用复用开漏/推挽输出,在这里输出寄存器将被断开,输出控制将转移给片上外设。引脚定义表里可以看到,TIM2的CH1可以从PA0挪到PA15上,进行引脚重映射需要用到AFIO,开启AFIO时钟。
2024-08-25 15:30:03 459
原创 STM32(五):定时器——输出比较
极性选择:给CC1P写0,即不反转,写1,电平翻转。占空比= TON / TS(占空比越大,等效的模拟电压就越趋向于高电平,占空比越小,等效的模拟电压就越趋向于低电平) 分辨率= 占空比变化步距(例如:1%,2%,3% 这种分辨率是1%)可以输出频率和占空比都可调的PWM波形,一般只使用向上计数,由于输出模式里可以设置极性,所以PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。第三步 配置输出比较单元,包括CCR的值,输出比较模式,极性选择,输出使能这些参数。
2024-08-23 21:58:18 1311
原创 STM32(四):定时器——定时中断
中断输出控制(即,中断输出允许位):解决定时器模块有很多地方都要申请中断,看是否需要这个中断,如果需要就允许,如果不需要这个中断,就禁止。主模式把更新事件映射到 触发输出TRGO的位置,TRGO直接接到DAC的触发转换引脚上,直接触发DAC,不需要软件的参与,实现了硬件的自动化。,比如:先初始化TIM3,然后使用主模式把它的更新事件映射到TRGO上,然后再初始化TIM2,这里算则ITR2,对应的就是TIM3的TRGO。CK_CNT:计数器时钟,即时分频器的时钟输出,也是计数器的时钟输入。
2024-08-23 00:47:54 1234
原创 STM32(三):EXTI外部中断
在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
2024-08-20 01:33:14 791
原创 STM32(二):GPIO
1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。(PN-MOS都有效)下,高低电平都有驱动能力,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算。,这是对输入电压进行限幅。电压大于上限,输出高电平,电压小于下限,输出低电平,然后输入寄存器可以读取某一位的数据。
2024-08-17 17:16:58 870
visionLSTM-xLSTM
2024-08-22
90+深度学习数据集.pdf
2024-08-22
3500个常用汉字,超级全
2022-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人