- 博客(25)
- 收藏
- 关注
原创 使用CubeMX新建SPI读写串行FLASH工程
首先使用CubeMX自动生成ISPI的配置文件,然后根据野火的例程bsp_spi.c,bsp_spi.h修改,并添加FLASH的读写代码。2、使用CubeMX生成的SPI外设驱动代码只是进行了配置,还没有使能,所以还要在初始化后添加外设使能代码。在这个工程中,需要使用到外设I2C、USART、LED、EEPROM,所以需要建立相应的板级支持包。2、USART板级支持包bsp_debug_usart.c,bsp_debug_usart.h。1、因为参考的是野火的例程,所以SPI模式选择的是模式3。
2025-05-08 14:36:35
181
原创 使用CubeMX新建I2C读写EEPROM工程
使用CubeMX新建工程,具体操作步骤可参考:STM32CubeMX学习笔记(9)——I2C接口使用(读写EEPROM AT24C02)_cubemx i2c-优快云博客在这个工程中,需要使用到外设I2C、USART、LED、EEPROM,所以需要建立相应的板级支持包。直接从野火例程中移植。前面有新建修改过,这里直接移植野火例程。首先使用CubeMX自动生成I2C的配置文件,然后根据野火的例程bsp_ic_ee.c,bsp_ic_ee.h修改,并添加EEPROM的读写代码。1、修改的地方:
2025-05-06 15:32:48
351
原创 使用CubeMX新建DMA工程——存储器到外设模式
LED板级支持包直接移植野火的,DMA板级支持包直接使用自动生成的代码在里面稍作修改。3、GPIO DMA USART LED 初始化。6、USART1向DMA发出TX请求,开始DMA数据传输。7、同时CPU控制LED翻转。1、HAL库函数初始化。5、填充将要发送的数据。
2025-05-01 23:01:40
355
原创 使用CubeMX新建DMA工程——存储器到存储器模式
新建工程的基本操作步骤参考这里:【【野火】STM32 HAL库开发实战指南 教学视频 手把手教学STM32全系列 零基础入门CubeMX+HAL库,基于野火全系列STM32开发板】 https://www.bilibili.com/video/BV18X4y1M763/?
2025-05-01 17:52:56
398
原创 使用CubeMX新建USART1不定长接收工程
初始化串口,开启第一次接收状态,当接收到数据时触发中断,跳转到中断服务函数中判断是否产生空闲中断标志位,设置接收变量和接收长度变量,清除串口空闲中断标志位,关闭接收使能位。然后再跳转到中断回调函数判断是否接受的数据长度超出设定的数组大小结束中断回到主函数执行主循环,判断是否产生了接收中断,打印接收到的字节长度,然后开启发送中断函数,发送完后重启接收。将bsp_debuge_usart.c添加到工程文件夹Core中,将bsp_debuge_usart.h的头文件路径添加到工程中。在main函数中添加代码。
2025-04-27 19:06:51
343
原创 使用CubeMX新建SysTick延时函数工程——使用中断,不使用HAL_Delay
SysTick 定时器的计数器是向下递减计数的,计数一次的时间 TDEC=1/CLKAHB,当重装载寄存器中的值 VALUELOAD 减到 0 的时候,产生中断,可知中断一次的时间 T INT=VALUELOAD * TDEC=VALUE LOAD/CLK:sub:AHB,其中 CLKAHB =72MHZ。TimingDelay 的值等于延时函数中传进去的 nTime 的值,比如 nTime=100000,则延时的时间等于100000*10us=1s。以中断的时间 TINT 就可以计算出需要定时的时间。
2025-04-16 22:30:00
307
原创 基于STM32F103C8T6的温湿度检测装置
本项目设计的是一款基于STM32F103C8T6的温室大棚检测系统低配版。由STM32F103C8T6最小系统板,OLED显示屏,DHT11温湿度检测传感器,光敏电阻传感器组成,
2025-04-16 15:00:00
502
原创 使用CubeMX新建EXTI外部中断工程——不使用回调函数
之前一直都是在看野火的视频没有亲手使用CubeMX生成工程,而且野火给的例程代码框架和自动生成的框架也不一样,原本想着对比着例程应该不会多难,但是动手实践下来还是有很多问题的,光看视频确实没有动手操作更能帮助理解。
2025-04-15 22:38:08
1059
原创 使用CubeMX新建ADC电压采样工程——独立模式单通道中断采样
1、使用CubeMX生成的代码是外设的基本配置和GPIO初始化,应用代码需要自己手动添加。这里是在中断中得到采样转换后的值,所以要使用HAL库中的函数HAL_ADC_Start_IT(&hadc1);开启ADC中断采样。它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,如果。其主要作用就是判断是哪个 ADC 产生中断,清除中断标识位,然后调用中断回调函数。中断服务函数文件,找到 ADC1 中断的服务函数。中断服务函数里面就调用了 ADC 中断处理函数。
2025-04-15 09:37:57
280
原创 跟着野火视频学习FreeRTOS——事件
事件标志组存储在一个 EventBits_t 类型的变量中,该变量在事件组结构体中定义,在 STM32中, uxEventBits 是 32 位的,所以我们有 24 个位用来实现事件组。除了事件标志组变量之外,FreeRTOS 还使用了一个链表来记录等待事件的任务,所有在等待此事件的任务均会被挂载在等待事件列表 xTasksWaitingForBits。在 FreeRTOS 事件中, 每个事件获取的时候,用户可以选择感兴趣的事件,并且选择。但是它与信号量不同的是,事件的发送操作是不可累计的,
2025-04-08 14:17:46
968
原创 跟着野火视频学习FreeRTOS——互斥量
用互斥量处理不同任务对临界资源的同步访问时, 任务想要获得互斥量才能进行资源访问,如果一旦有任务成功获得了互斥量,则互斥量立即变为闭锁状态,此时其他任务会因为获取不到互斥量而不能访问这个资源, 任务会根据用户自定义的等待时间进行等待,直到互斥量被持有的任务释放后,其他任务才能获取互斥量从而得以访问该临界资源,此时互斥量再次上锁,如此一来就可以确保每个时刻只有一个任务正在访问这个临界资源,保证了临界资源操作的安全性。当互斥量被任务持有时,其他任务将不能对该互斥量开锁或持有,这个任务获得互斥量的所有权。
2025-04-08 00:02:37
760
原创 跟着野火视频学习FreeRTOS——信号量
此外系统还有很多资源,我们也可以使用计数信号量进行资源管理,信号量的计数值表示系统中可用的资源数目,任务必须先获取到信号量才能获取资源访问权,当信号量的计数值为零时表示系统没有可用的资源,注意,在使用完资源的时候必须归还信号量,否则当计数值为0的时候任务就无法访问该资源了。用作同步时,信号量在创建后应被置为空,任务一获取信号量而进入阻塞,任务二在某种套件发生后,释放信号量,于是任务以一获得信号量得以进入就绪态,如果任务一的优先级是最高的,那么就会立即切换任务,从而达到了两个任务间的同步。
2025-04-07 15:15:15
593
原创 跟着野火视频学习FreeRTOS——消息队列
是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度消息。任务能够从队列里面读取消息,当队列中消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间xTaskToWait,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。当队列中有新消息时,被阻塞的任务会被唤醒并处理新消息。当等待的时间超过了指定的阻塞时间,即使队列中尚无有效数据,任务也会自动从阻塞态转为就绪态。消息队列是一种异步的通信方式。
2025-04-05 19:03:14
634
原创 跟着野火视频学习FreeRTOS——支持时间片
所谓时间片就是同一个优先级下可以有多个任务,每个任务轮流地享有相同的CPU时间,享有CPU的时间叫做时间片。在FreeRTOS中时间片的大小只能是一个tick。
2025-03-31 08:16:50
258
原创 跟着野火视频学习FreeRTOS——任务延时列表的实现
本章之前,为了实现任务的阻塞延时,在任务控制块中内置了一个延时变量xTicksToDelay.每当任务需要延时的时候,就初始化xTicksToDelay需要延时的时间,然后将任务挂起这里的挂起只是将任务在优先级位图表 uxTopReadyPriority 中对应的位清零,并不会将任务从就绪列表中删除。当每次时基中断(SysTick 中断) 来临时, 就扫描就绪列表中的每个任务的 xTicksToDelay, 如果 xTicksToDelay 大于 0 则递减一次,然后判断xTicksToDelay 是否为
2025-03-30 21:23:37
394
原创 跟着野火视频学习FreeRTOS——支持多优先级
本节就是关于对任务切换方式这一部分的补充。之前是定义了taskYILED()函数实现两个任务轮流切换,还不支持多优先级。在本节之前,FreeRTOS还没有支持多优先级,只支持两个任务互相切换,从此,开始加入优先级的功能。在FreeRTOS中,数字优先级越小,逻辑优先级越小。
2025-03-30 20:35:58
336
原创 跟着野火视频学习FreeRTOS——空闲任务与阻塞延时的实现
*定义空闲任务的栈*/空闲任务的栈是一个定义好的数组,大小由FreeRTOSConfig.h中定义的宏configMINIMAL_STACK_SIZE控制,默认128字即512字节。定义在main.c中/*定义空闲任务的任务控制块*/本节空闲任务与阻塞延时的实现就是在上节任务的创建与任务的切换的基础上,将软件延时换为了阻塞延时,阻塞延时就是当要进行延时的时候,当前任务失去CPU的使用权,CPU转向去执行其他任务,当没有其他任务看完执行的时候执行空闲任务,延时结束后返回到当前任务。
2025-03-27 20:47:58
741
原创 跟着野火视频学习FreeRTOS——任务的定义与任务的实现
本章要记录学习的内容是任务的定义与任务切换的实现裸机系统中主题就是main函数里面的顺序执行的无限循环。多任务系统中根据功能的不同把整个系统分割成独立的无法返回的函数,这个函数称为任务。定义任务栈应该就是为了给任务的运行提供基础设施平台。裸机系统中全局变量;子函数调用时的局部变量;中断发生时的函数返回地址,都放在栈中,栈是单片机RAM里的一段连续的内存空间,栈的大小一般在启动文件或者链接脚本里指定,最后又C库函数_main初始化。多任务系统中:每个任务都是独立的,互不干扰,要为每个任务分配独立的栈空间。
2025-03-26 17:58:40
978
原创 跟着野火视频学习FreeRTOS——列表与列表项的实现
这篇文章主要记录一下我在学习列表与列表项的实现过程中遇到的问题和学习内容链表中共有n个节点,前一个节点都有一个箭头指向后一个节点,首尾相连,组成一个圈。节点本身必须包含一个结点指针用于指向后一个节点,除了这个结点指针还可以携带一些私有信息,携带的方式分为两种:(1)在节点的自定义类型结构体中可以有单个的数据、数组、指针数据和自定义的结构体数据类型。//指向链表的下一节点char data1;//单个的数据//数组//指针数据//自定义结构体类型数据。
2025-03-19 17:52:31
762
原创 跟着野火视频学习FreeRTOS——新建工程软件仿真遇到的问题
1、使用配置和,这两个内核与启动文件,最终生成的与野火视频教程中的两个文件不同,是三个文件,多了一个文件。2、使用进行软件仿真时无法设置,显示的是。
2025-03-18 10:29:41
1291
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人