- 博客(47)
- 收藏
- 关注
原创 FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
滴答定时器本质上是一个硬件定时器,在多数常见的微控制器平台上,如 STM32 通常使用系统滴答定时器(SysTick)。它为 FreeRTOS 提供了一个基本的时间基准,以固定的频率产生中断,系统根据这些中断来维护时间节拍(tick),进而实现任务的调度、延时操作、超时检测等功能。比如,通过滴答定时器产生的中断,FreeRTOS 可以知道何时该切换到高优先级的就绪任务,或者判断一个任务的延时时间是否已到。
2025-06-07 21:41:08
915
原创 FreeRTOS多任务系统①
回想一下我们以前在使用 51、STM32 单片机裸机(未使用实时操作系统)的时候一般都是在main 函数里面用 while(1)做一个大循环来完成所有的处理, 即应用程序是一个无限的循环, 循环中调用相应的函数完成所需的处理。有时候我们也需要中断中完成一些处理。相对于多任务系统而言, 这个就是单任务系统, 也称作前后台系统, 中断服务函数作为前台程序, 大循环while(1)作为后台程序。
2025-05-30 20:48:46
914
原创 Altium Designer24软件介绍 | 硬件知识
本文记录的是本人在学习 Altium Designer24过程中个人感觉比较重要的以及比较容易遗忘内容,方便日后复习及梳理知识网络。
2025-05-21 08:43:14
970
原创 【已解决】 “The Firmware Package (STM32Cube FW_F1) is not available in your STM32CubeMX Repository.
“The Firmware Package (STM32Cube FW_F1) is not available in your STM32CubeMX Repository. Do you want to download this now?”或者 “Please login to download a software package.”
2025-04-23 22:05:14
532
原创 【KEIL报错已解决】.\Objects\Project.axf: Error: L6218E: Undefined symbol Rx_buffer (referred from usart.o).
【KEIL报错已解决】.\Objects\Project.axf: Error: L6218E: Undefined symbol Rx_buffer (referred from usart.o).
2025-04-15 20:08:02
1030
原创 【H桥电机驱动电路原理】-学习笔记
电机正转状态, L+低电平0,Q14置0,Q14三极管断开,这边Q10就是置1(本来Q14断开也是0V,但是5v上拉变为高),那么Q10三极管就是导通的,所以当L+为低电平0时,Q5 (L+为0,5v上拉,形成电压差,所以导通)和 Q10导通;电机反转状态, L-低电平0,Q13置0,Q13三极管断开,这边Q9就是置1(本来Q13断开也是0V,但是5v上拉变为高),那么Q9三极管就是导通的,所以当L-为低电平0时,Q6 (L-为0,5v上拉,形成电压差,所以导通)和 Q9导通;
2025-04-14 04:30:00
1620
原创 【STM32】解读启动文件startup_stm32f10x_md.s
属于汇编伪指令,其功能是定义一个常量。在这里,Stack_Size被定义为0x00000400,换算成十进制就是 1024。这意味着栈的大小为 1024 字节。STACKNOINITREADWRITEALIGN=3SPACEStack_Size代码功能这段代码的主要功能是定义一个大小为 1024 字节、起始地址按 8 字节对齐、可读写且无需初始化的栈空间,并且确定了栈顶指针的初始位置。在程序启动时,栈指针会被设置为 __initial_sp,后续函数调用、局部变量存储等操作都会使用这个栈空间。
2025-04-11 22:25:47
1020
原创 【Altium Designer 24】安装 | 破解 | 创建工程
可视化【Altium Designer 24】安装 | 破解 | 创建工程详细教程
2025-04-10 17:45:37
6080
2
原创 【STM32】最后一刷-江科大Flash闪存-学习笔记
最详细的FLASH闪存使用方法。其实就是,在主函数对SRAM数组Store_Data进行修改,然后在放到闪存,防止SRAM掉电丢失,然后在上电初始化的时候在把闪存的数据再读取到SRAMStore_Data数组,实现SRAM掉电不丢失
2025-03-31 17:50:23
2634
原创 Keil5报错:“Error: Flash Download failed - Target DLL has been cancelled”
错误已解决
2025-03-30 18:31:42
4911
原创 【STM32】WDG看门狗(学习笔记)
WDG(Watchdog)看门狗看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号STM32内置两个看门狗独立看门狗(IWDG):独立工作,对时间精度要求较低窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。
2025-03-29 20:36:47
1450
原创 【江协科技STM32】PWR电源控制(学习笔记)
第三点注意: 我们的程序默认在SystemInit函数里的配置的是使用HSE外部高速时钟,通过PLL倍频得到72MHz的主频,但是进入停止模式之后,PLL和HSE都停止了,而且在退出停止模式时,他并不会再自动帮我们开启PLL和HSE,而是默认用HSI的8MHz,直接作为主频。这是一个问题,所以我们一般再停止模式唤醒后,第一时间就是重新开启HSE,配置为72MHz的主频。停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。
2025-03-28 11:14:47
1437
原创 【江协科技STM32】读写备份寄存器&RTC实时时钟(学习笔记)
接下来还要写两个函数,一个是设置时间,一个是读取时间。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)//将用户数据写入指定的数据备份寄存器。void RTC_WaitForSynchro(void)//等待RTC寄存器(RTC_CNT, RTC_ALR和RTC_PRL),设置RSF标志1。uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)//从指定的数据备份寄存器读取数据。
2025-03-26 21:38:55
1649
原创 【江协科技STM32】BKP备寄存器&RTC实时时钟(学习笔记)
BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。但是如果VDD电源断开,VBAT也没有电,那就数据清零。因为BKP本质上时RAM存储器,没有掉电不丢失的能力。TAMPER引脚产生的侵入事件将所有备份寄存器内容清除RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲存储RTC时钟校准寄存器。
2025-03-25 17:07:13
1227
原创 【STM32】SPI通信外设&硬件SPI读写W25Q64
STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担可配置8位/16位数据帧、高位先行/低位先行(标黑常用)时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256),就是SCK,一般体现的是传输速度,单位为Hz或者bit/s,最大进行2分频,72M/2=36MHz,I2C最大400kHz,SPI最大频率比I2C大90倍,SPI1时钟频率比SPI2大一倍支持多主机模型、主或从操作可精简为半双工/单工通信。
2025-03-23 23:54:03
1348
原创 【STM32】I²CC通信外设&硬件I²CC读写MPU6050(学习笔记)
用通俗语言做笔记,让我们都理解I2C的时序流程,库函数用法。简单明了说的就是这里。
2025-03-20 19:37:06
1427
原创 【STM32】I2C通信协议&MPU6050芯片-学习笔记
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景测量X、Y、Z轴的加速度测量X、Y、Z轴的角速度加速度计具有静态稳定性,不具有动态稳定性。陀螺仪具有动态稳定性,不具有静态稳定性。两种传感器特性刚好互补,取长补短,进行互补滤波,就能融合得到静态和动态都稳定的姿态角了辅助理解辅助理解。
2025-03-17 21:42:09
1213
原创 【STM32】USART串口收发HEX数据包&收发文本数据包
如果连续发送数据包,程序处理不及时,可能导致数据包错位,所以要修改一下程序,等每次处理完成之后再接收下一个数据包。和extern uint8_t Serial_RxFlag;①修改中断函数,在中断这里只有Serial_RxFlag ==0了,才会继续接收下一个数据包,这样写数据和读数据完全严格分开,不会同时进行。程序只写接收部分,因为发送的话,不方便像HEX数组一样一个个更改, 所以发送直接在主函数调用Send_String函数或者printf。有关数据包的收发,其实还是有着非常多的问题需要考虑的。
2025-03-15 21:09:20
1856
原创 【江协科技STM32】串口发送&串口发送+接收(学习笔记)
1、本章记录串口发送和接收数据的核心代码、函数解释、模块函数封装、printf函数移植(较难)等等2、使用查询法和中断对串口数据进行发送和接收
2025-03-14 21:44:50
1184
原创 【STM32】USART串口协议&串口外设-学习笔记
本文详细接收串口协议与串口外设的各部分重点知识,包括串口通信的类型及区别等等,以及串口框图和基本结构的解释、数据帧数据采样及波特率发生器基本计算等等
2025-03-14 11:57:52
3091
原创 【STM32F103C8T6】DMA数据转运&ADC多通道
DMA转运三个条件: ①传输计数器大于0②触发源有触发信号③DMA使能 三个条件缺一不可
2025-03-11 21:58:46
1906
原创 【江协科技STM32】DMA直接存储器存储-学习笔记
DMA(Direct Memory Access)直接存储器存取(直接访问STM32内部存储器,包括运行内存SRAM、程序存储器Flash、寄存器等等DMA可以提供外设(一般外设寄存器DR、Data register)和存储器(运行内存SRAM、程序存储器Flash,是存储变量数组和程序代码的地方)或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)每个通道都支持软件触发(存储器到存储器用。
2025-03-10 17:58:23
1400
原创 【STM32】ADC功能-单通道&多通道(学习笔记)
①RCC开启时钟,包括ADC和GPIO的时钟,另外ADCCLK的分频器也要配置②配置GPIO,,把需要用的GPIO配置成模拟输入模式(GPIO_Mode_AIN模式下GPIO无效,即断开GPIO,防止GPIO输入输出对我模拟电压造成干扰),所以AIN模式就是ADC专属模式 ③配置多路开关,把左边通道接入到右边的规则组列表里④配置ADC转换器(初始化ADC),一个结构体可以配置完ADC转换器和AD数据寄存器⑤开关控制,调用ADC_Cmd()函数,开启ADC
2025-03-09 17:21:05
1857
原创 【江协科技STM32】ADC数模转换器-学习笔记
拓展知识: 对应看图按序号理解 来源RCC时钟树 对应ADC1、ADC2,10个外部输入通道引脚定义表 单次转换,非扫描模式 连续转换,非扫描模式 单次转换,扫描模式 连续转换,扫描模式 触发控制:对应ADC框图EXTXEL开始触发(规则组)位置这里的ADC是12位的,它的转换结果就是一位12位的数据,但是这个数据寄存器是16位的,所以就存在一个数据对齐的问题。这里一般使用数据右对齐方式,这样读取16位寄存器直接就是转换结构。如果选择数据左对齐,直接读取得到的数据会比实际数据大。因为数据左对齐实际就是把数
2025-03-08 19:52:44
2293
原创 【江协科技STM32】TIM编码器接口测速(学习笔记)
Encoder Interface 编码器接口编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2旋转编码器简介可参考下面这篇文章旋转编码器部分,里面也涉及到正交波形介绍[STM32] 江科大-EXTI外部中断(学习笔记-上)_江科大stm32中断笔记-优快云博客。
2025-03-07 20:03:26
1470
原创 【江科大STM32】TIM输入捕获模式&PWMI模式测频率
然后在这个PWM模块代码进行改进,目前这个代码逻辑是,初始化TIM2的通道1,产生一个PWM的波形,输出引脚是PA0,然后通过Set_Compare函数,可以调节CCR1的寄存器的值,从而控制PWM的占空比,但是目前这个PWM频率是在初始化已经写好的了,是固定的,操作起来不太方便。虽然两个都是计次的东西,但是滤波器计次,并不会改变信号的原有频率,一般滤波器的采样频率都会远高于信号频率,所以它只会滤除高频噪声,使信号更加平滑,1KHz滤波之后仍然是1KHz,信号频率不会发生变化。
2025-03-06 19:43:53
1379
原创 【STM32】TIM输入捕获-学习笔记
IC(Input Capture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时(高低电平变化),当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量输入捕获和输出比较的4通道:4个输入捕获和输出比较通道共用4个CCR寄存器,它们的CH1~CH4四个通道引脚也是共用的。
2025-03-04 17:14:18
1379
原创 【江科大STM32】TIM输出比较-PWM功能(学习笔记)
①RCC开启时钟(把要用的TIM外设和GPIO外设时钟都打开)② 配置时基单元,包括前面的时钟源选择③配置输出比较单元,里面包括CCR的值,输出比较模式,极性选择,输出使能这些参数④配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出模式⑤ 运行控制,启动计数器TIM函数之前有部分介绍过了,具体参考这篇文章 [江科大STM32]TIM定时器中断(学习笔记)下-优快云博客 重要函数需要掌握: 不常用了解即可: 使用方法:需要初始化哪个通道,就调用哪个函数,不同的通道对应的G
2025-02-28 21:43:20
1571
1
原创 【江科大STM32】TIM输出比较(学习笔记)
PWM(Pulse Width Modulation)脉冲宽度调制,也是数字输出信号,高低电平组成在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域PWM参数:频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距PWM的频率越快,它的等效模拟信号就越平稳。不过同时性能开销就越大,一般来说,PWM的频率在几k到几十KHz,这个频率就足够快了。
2025-02-25 20:31:34
1536
1
原创 [江科大STM32]TIM定时器中断(学习笔记)下
①RCC开启时钟(打开后定时器的基准时钟和外设的工作时钟都会打开) ②选择时基单元的时钟源(对于定时中断就选择内部时钟源) ③配置时基单元 ④配置输出中断控制,允许更新中断输出NVIC⑤配置NVIC,在NVIC打开定时器中断通道,并分配一个优先级 配置NVIC可参考{STM32} 江科大学习笔记-EXTI外部中断(下)_江科大stm32笔记exti-优快云博客⑥使能运行控制,打开计数器
2025-02-21 18:04:34
1500
原创 [江科大STM32]-TIM定时器中断(学习笔记)上
TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位,在72MHz计数时钟下可以实现最大59.65s的定时预分频器:可以对计数器的时钟进行分频,让计数更加灵活不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、、基本定时器三种类型。
2025-02-18 17:59:44
1725
原创 {STM32} 江科大学习笔记-EXTI外部中断(下)
参数说明EXTI_Line指定要启用或禁用的EXTI行EXTI_Mode指定EXTI行的模式。指定EXTI线的触发信号活动边。指定所选EXTI行的新状态。可设置为“ENABLE”或“DISABLE”EXTI_Line配置EXTI_Mode配置EXTI_Trigger配置具体配置//将EXTI的第十五个线路配置成中断模式,下降沿触发,开启中断//开启中断//中断模式//下降沿触发配置优先级分组:抢占优先级和子优先级。参数说明优先级分组位长度。
2025-02-15 17:23:29
1220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人