- 博客(23)
- 收藏
- 关注
原创 FReeRtos中断管理、临界段保护和任务调度器挂起和恢复学习
FReeRtos中断管理(优先级)中断优先级数值越小越优先所有优先级配置为抢占优先级,选4组SysTick 滴答定时器中断,统计任务延时、阻塞时间每隔1ms(常用)进一次中断,给系统计时2)PendSV 可挂起系统调用中断所有任务切换,原因,才进来切换任务 避免:中断跑一半被任务切换打断,数据错乱、时序炸掉滴答计时能正常跑,不会被任务切换耽误系统节拍紧急硬件事件,不会被系统调度卡住开中断关中断出现问题1.调用 portDISABLE_INTERRUPTS (),所有定时器中断全都关不掉。
2026-05-19 17:40:32
405
原创 freertos任务学习
调度器就是使用相关的调度算法来决定当前需要执行的哪个任务FreeRTOS 一共支持三种任务调度方式:1.抢占式调度:主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。2.时间片调度:主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。3.协程式调度:当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务。
2026-05-15 16:17:55
416
原创 STM32 小手表项目(标准库版)
STM32F103 的实时时钟(RTC)是一个独立的定时器。STM32的 RTC模块拥有一组连续计数的计数器,在相对应的软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统的当前时间和日期。RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变,只要后备区域供电正常,那么RTC将可以一直运行。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。
2026-04-15 20:38:26
518
原创 Freertos前置知识学习
使用STM32CubeMX 创建的FreeRTOS工程中,FreeRTOS相关的源码如下:主要涉及2个目录:Core Inc目录下的FreeRTOSConfig.h是配置文件 Src目录下的freertos.c是STM32CubeMX创建的默认任务 根目录下是核心文件,这些文件是通用的 portable 目录下是移植时需要实现的文件目录名为:[compiler]/[architecture] 比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS工具上的移植文件。
2026-03-17 19:01:10
415
原创 C语言学习笔记
第一个表示标点符号,第二个先进行逗号运算a[i,j]:,表示逗号运算符表示a[j]char a[][10]不等于char *a[]
2026-03-12 16:16:42
360
原创 FreeRTOS创建多任务:LED与LCD并行运行学习笔记
/任务句柄,以后使用它来操作这个任务。两个任务都是死循环,需要freertos,需要一个任务a运行一个任务b运行一个。void*const pvParameters, //调用任务函数时传入的参数。TaskFunction_tpxTaskCode, //函数指针,任务函数。创建两个任务,任务A运行Led_Test,任务B运行LCD_Test。const char*const pcName, //任务的名字。定义自己的任务(一个是任务要干嘛,一个是创建任务)默认任务执行屏幕,创建的新任务执行灯。
2026-03-06 18:47:28
398
原创 STM32CubeMX创建FreeRTOS工程学习笔记
FreeRTOS 的参数包括时基频率、任务堆栈大小、是否使能互斥锁等等,需要开发者根 据自己对FreeRTOS的了解以及项目开发的需求,来定制参数。CMSIS-RTOS V1/V2,相较之于 V1 版本的CMSIS-RTOS API,V2 版本的API的兼容性更高,为。另外,本实验使用了FreeRTOS,FreeRTOS的时基使用的是Systick,而STM32CubeMX。中默认的HAL库时基也是Systick,为了避免可能的冲突,最好将HAL库的时基换做其它的。FreeRTOS 的任务调度、
2026-03-06 16:57:53
409
原创 FreeRTOS链表实现学习
(1)链表节点的数据结构在list.h中建立// 节点值,通常用于排序(如任务唤醒时间)// 指向下一个节点的指针// 指向前一个节点的指针// 指向拥有此节点的对象(如任务控制块)// 指向此节点所属的链表容器//节点数据类型重定义辅助值用于帮助节点进行顺序排列,辅助值数据类型TickType_t,在Freertos中,凡是涉及数据类型的地方,Freertos都会将标准的C数据类型用typedef重新设置一个类型名。
2026-01-08 15:31:02
691
原创 新建Freertos——软件仿真
在上述建立的project文件夹下建立工程 选择处理器ARMCM3;freertos:include存放头文件/portable存放和处理器相关的接口文件,也叫移植文件。System_ARMCM3.c定义系统时钟频率是25MHz,修改Target时钟频率为25MHz。1.2.1在keil中新建文件组(添加文件main并写)User:存放main.c和其他用户编写的程序。Project:用于存放新建的工程文件。Doc:用于存放对整个工程的说明文件。1.2使用KEIL新建工程。1.3.1使用模拟器调试。
2026-01-06 21:22:42
164
原创 I2C通信学习
下面第一个模块:MPU6050模块可以进行姿态测量,使用了I2C通信协议第二个模块:OLED模块,可以显示字符等等,使用了I2C通信协议第三个模块:AT24C02存储器模块第四个模块:DS3231,实时时钟模块I2C标志性引脚两根通信线,SCL串行时钟线,SDA串行数据线一主多从:单片机作为主机,主导I2C总线的运行,挂载在I2C总线的所有外部模块都是从机,从机只有被主机点名之后才能控制I2C总线,不能在未经允许的情况下去碰I2C总线,防止冲突。
2025-12-15 21:23:14
882
原创 串口通信协议与特性学习
其中单片机和电脑通信是一大优势,可以接电脑屏幕,非常适合调试程序,打印信息,像I2C和SPI这些,一般是芯片之间的通信,不会接在电脑上第一个USB转串口模块CH340芯片,这个芯片可以将串口协议转换为USB协议,一边是USB口可以接在电脑上,另一边是串口引脚,可以支持串口的芯片接在一起,这样就能实现串口和电脑的通信了中间陀螺仪传感器模块,可以测量角速度、加速度这些姿态参数,一边是串口引脚,另一边是I2C引脚蓝牙串口模块,下面四个脚是串口通信的引脚,上面的芯片可以和手机互联,实现手机遥控单片机的功能。
2025-12-10 20:04:07
811
原创 STM32 DMA数据转运学习
恢复缺省配置初始化结构体初始化使能中断输出使能设置当前数据寄存器获取当前数据寄存器(返回传输计数器的值)获取标志位状态、清除标志位、获取中断状态、清除中断挂起位。
2025-12-08 17:54:50
1066
原创 STM32 ADC模数转换与配置学习
定时器可以通向ADC、DAC这些外设,用于触发转换,ADC需要过一段固定时间段转换一次,比如1ms转换一次;采样保持原因:量化编码(逐次比较)是需要一些时间的,如果在这一小段时间内,输入的电压还在不断变化,就无法定位,在量化编码之前,需要设置一个采样开关,先打开采样开关,收集一下外部的电压,比如可以用一个小容量的电容存储一下这个电压,存储好了之后,断开采样开关,在进行后面的AD转换,这样在量化编码的期间,电压始终保持不变,采样保持的过程中,需要闭合采样开关,过一段时间在断开,这类就会产生一个采样时间。
2025-12-04 21:44:04
696
原创 STM32:TIM输入捕获测频与占空比以及TIM编码器学习
IC(Input Capture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时(上升沿/下降沿),当前CNT的值将被锁存到CCR中(把当前CNT的值读出来写入CCR),可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWM模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量通用定时器总共有4个通道,高级定时器也有4个通道,输入捕获电路,通用定时器和高级定时器没有区别,基本定时器没有输入捕获电路功能;
2025-12-03 17:24:18
1208
原创 PWM以及应用学习
1.tim.h中配置输出比较模块:OC就是OutPut Compare,输出比较,一个函数配置一个单元给输出比较结构体赋一个默认值配置强制输出模式:可以用来暂停输出波形并且强制输出高或低电平(本质=占空比100%和占空比%0)配置CCR寄存器预装功能(影子寄存器):写入的值不会立刻生效,而在更新事件才会生效配置快速使能单独设置输出比较的极性(带N表示高级定时器里互补通道的配置)结构体可以用来初始化,这里单独修改某个函数。
2025-11-26 18:40:48
1033
1
原创 STM32中断学习
中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前运行程序,转而去处理中断程序,处理完成后返回原来被暂停的位置继续运行中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
2025-11-25 22:01:52
274
原创 STM32定时器中断配置学习
1.添加.c.h文件,放在System文件夹下面.c函数中1-1初始化定时器第一步RCC开启时钟,打开时钟后定时器的基准时钟和整个外设的工作时钟同时打开第二步选择时基单元的时钟源,对于定时中断,选择内部时钟源第三步配置时基单元,包括预分频器、自动重装器、计数模式等,用一个结构体配置即可第四步配置输出中断控制,允许更新中断输出到NVIC第五步,配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级第六步运行控制,使能计数器找到定时器的库函数tim.h部分函数解释:恢复缺省配置。
2025-11-25 19:42:05
571
原创 STM32定时器学习
TIM(Timer)定时器对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
2025-11-24 17:50:38
820
原创 中断实例学习
1-1配置RCC,将涉及到的外设的时钟全部打开1-2配置GPIO,选择端口为输入模式1-3配置AFIO,选择所用的GPIO连接到EXTI1-4配置EXTI,选择边沿触发方式、触发响应方式1-5配置NVIC,给中断选择合适优先级。
2025-11-24 11:47:21
563
原创 按键控制LED与光敏控制蜂鸣器实战学习
建立新文件夹Hardware来存放硬件驱动(在工程下方添加该文件夹、工程中添加路径)工程下Hardware添加新.c.h文件:LED.c.h。
2025-11-21 18:16:40
320
原创 STM32点灯学习+蜂鸣器
用结构体参数来初始化GPIO口;需要先定义一个结构体变量,进行赋值;函数内部自动读取结构体赋值,自动将外设各个参数配置好。1)GPIO_DeInit 所指定的GPIO外设会被复位。第二种方式:全部初始化。2)采用GPIO_Write来控制端口。RCC外设时钟控制参数(外设,使能)具体右击跳转定义。RCC初始化全部都是GPIOA,无需修改。2.电灯操作与之前相同(修改接口即可)改动:1)端口初始化。1.常用RCC函数定义RCC.h。3.闪烁灯+delay函数即可。4)GPIO读取函数。5)GPIO写入函数。
2025-11-21 10:08:37
333
原创 STM32新建工程快速入门指南
3.工程选项中,C/C++,Define内定义USE_STDPERIPH_DRIVER;Paths中添加声明的文件夹路径;调试器中勾选Reset and Run。2.工程文件夹里面分别建立文件夹存放启动文件(start)、库函数(Library)、User用名称分组,并将现有文件添加至工程中。1.建立工程文件夹,Keil中新建工程。
2025-11-20 15:42:46
111
原创 STM32库函数点亮PC13教程
右击进入函数定义,按要求填写两个参数(外设,状态)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);2)结构体需要按要求定义(mode、pin、speed)右击进入函数定义,按要求填写参数(1端口2结构体地址)1)端口,根据定义点亮P13对应GPIOC。mode选择推挽输出其他按照右击函数定义选择。3.设置端口高低电平进行点灯。将PC13设置成高电平。库函数简介配置寄存器。2.配置GPIO模式。
2025-11-20 15:15:34
251
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅