自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 MultiButton 按键驱动模块的移植和使用

短按判断的次数是3,5ms检测一次。

2025-02-22 00:32:19 149

原创 MultiTimer 可无限扩展的定时器移植使用

MultiTimer 可无限扩展的定时器。记录下移植使用过程。

2025-02-21 22:28:20 329

原创 FreeRTOS的事件组

【代码】FreeRTOS的事件组。

2025-02-08 21:46:07 509

原创 STM32的Host U盘

记录下用STMCubeMx生成Host U盘+FATFS的过程。

2025-01-25 17:12:09 587

原创 FreeRTOS的二值信号量,计数信号量,互斥信号量

RTOS的信号量共有3中,分别是二值信号量,计数信号量和互斥信号量。信号量的创建,发送和获取其用的就是队列的函数。

2025-01-18 13:22:42 153

原创 使用Keil创建FreeRTOS工程

之前记录了使用Keil创建Keil自带的RTX5的RTOS和使用CubeMX创建FreeRTOS。这次来记录下使用Keil创建FreeRTOS。使用CMSIS-RTOS2将FreeRTOS封装好。

2025-01-10 22:33:18 454

原创 STMCubeMX创建SD卡的FATFS

在前面的SD的基础上,创建FATFS。

2025-01-04 12:59:29 304

原创 STMCubeMX 创建SD卡的DMA

使用CubeMX创建SD卡的DMA相对比较简单3.使用测试函数,改写发送和接收4.将栈改大,由0x400改成0x800

2025-01-04 11:16:18 200

原创 FreeRTOS的队列

=1==1。

2025-01-01 19:24:48 256

原创 FreeRTOS的调度器挂起和恢复

【代码】FreeRTOS的调度器挂起和恢复。

2024-12-27 21:52:18 293

原创 FreeRTOS的时间管理

【代码】FreeRTOS的时间管理。

2024-12-27 21:36:53 428

原创 FreeRTOS的任务调度

1.启动任务调度器 vTaskStartSchedulervoid vTaskStartScheduler( void ){BaseType_t xReturn; /* Add the idle task at the lowest priority. */ #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) { /* Create the idle task, storing its handle in xIdleTaskHandle so it c

2024-12-20 22:39:53 324

原创 FreeRTOS的任务挂起和恢复

【代码】FreeRTOS的任务挂起和恢复。

2024-12-20 21:12:54 373

原创 FreeRTOS的任务创建和删除

1.任务控制块typedef struct tskTaskControlBlock{ volatile StackType_t *pxTopOfStack; /*任务堆栈栈顶*/ #if ( portUSING_MPU_WRAPPERS == 1 ) /*MPU相关设置*/ xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE

2024-12-14 13:29:43 345

原创 FreeRTOS的链表和链表节点

【代码】FreeRTOS的链表和链表节点。

2024-12-13 22:26:53 227

原创 SD卡的 FATFS移植使用

1.参考之前的SPI_FLASH的FATFS文件系统移植使用。记录下SD卡的FATFS文件系统移植。在diskio.c文件中做相应修改。

2024-12-08 16:19:54 285

原创 SD卡的使用

加入 stm32_eval_sdio_sd.c 这是官方写的。由于SD卡的管脚是固定的,标准库参考官方例程就行。2.加入在其他文件中定义的缺少的东西。1.首先需要正确移植SD卡的程序。3.加入SDIO.c的函数。

2024-12-08 16:15:50 230

原创 SPI_FLASH FATFS文件系统的移植使用

读和写注意都是4096个字节,因为FATFS的最小单位是4K。需要在diskio.c ffconf.h做一定修改。我用的是SPI_FLAH,则在原来基础上新增加。直接是读ID是否正确,正确的就返回OK。使用SPI_FLASH的写功能就行。按照官网说明,需要提供相应的接口。这里使用SPI_的FLASH功能。记录下FATFS文件系统的使用。2.在Keil里面正确安装路径。ffconf.h需要修改的地方。这里是获取了设备的状态。1.将源文件都下载,在main中进行测试。

2024-12-08 16:00:38 414 1

原创 互斥量的使用

优先级继承属性,使用优先级继承属性的互斥锁将 ”等待线程“ 的优先级转移给当前互斥锁的所有者(如果所有者的线程优先级较低)。如果没有优先级继承,等待互斥锁的高优先级线程将被中优先级线程阻塞,称为优先级反转。每当拥有互斥锁的线程获得互斥锁时,锁计数就会增加。当互斥量达到0时,互斥量实际上会被释放,其他线程可以获取互斥量。互斥锁健壮属性,如果拥有的线程被终止(通过osThreadExit或osThreadTerminate),健壮的互斥锁将被自动释放。非健壮互斥锁不会被释放,用户必须手动确保释放互斥锁。

2024-11-01 21:43:14 322

原创 内存池的使用

函数osMemoryPoolNew创建并初始化内存池对象,并在发生错误时返回指向内存池对象标识符或NULL的指针。内存池可以看作是固定大小和相等大小的可用(未使用)内存块的链表。将内存释放到池中(使用osMemoryPoolFree)只需将块重新锁定到列表中即可。内存池是线程安全的固定大小的内存块。由于是线程安全的,它们可以从线程和ISR访问。池中的内存只能在block_size的固定部分分配/释放。[in]block_count内存池中内存块的最大数量。[in]block_size内存块大小(字节)。

2024-10-25 23:38:21 214

原创 单片机死机后仿真不破坏现场的办法

这时候直接运行的话,是不会复位程序而是停留在之前的运行状态。如果程序死机,则会直接进入HardFault。进而可以分析死机原因。记录下当单片机死机后,进行仿真而不重新恢复的办法。此时在仿真界面可以看到是灰色的。官网的链接写的非常明白了。在command窗口输入。可以看到可以仿真运行了。

2024-10-23 20:47:10 276

原创 进入Hardfault的解决办法

在程序运行过程中,有时候一些bug会导致程序司机,进入了HaedFault中

2024-10-20 10:29:40 495

原创 面相对象的思想编写驱动

在.h文件中,需要着重思考。按照AT24Cxx的特性,划分为硬件接口,IIC属性,AT24Cxx属性。将对象的所有属性都封装起来。以EEPROM存储芯片AT24Cxx为例。在写驱动的时候,一般写法。

2024-10-11 21:40:55 194

原创 创建FreeRTOS工程

在中间件选择为FreeRTOS2,Interface选择为CMSIS_V2。在适应RTE创建工程后,仿真的时候可以看到FreeRTOS的各种情况。这次来简单记录下使用STM32CubeMX创建FreeRTOS。上述做法是使用CubeMX创建的FreeRTOS工程。创建多个线程,包括名次,优先级,栈大小等属性。使用Keil创建后,可以看到各种属性已经添加。以后的用法就和CMSIS_RTOS2一样。也可以用Keil创建FreeRTOS工程。使用CubeMX时,选择时基为TIM6。对FreeTROS的各种配置。

2024-10-09 20:48:21 164

原创 RTOS定时器的使用

在RTOS的定时器是基于systick创建的,和裸机里的硬件定时器是不一样的。在RTOS的定时器中可以创建多个,方便使用。argument :计时器回调函数的参数。attr:定时器属性;func:指向回调函数的函数指针。type:指单次运行还是周期运行。在定时器回调函数做的事。

2024-10-06 20:49:34 344

原创 RTOS中队列的使用

使用队列和信号量和事件组的作用类似,只不过号量和事件组只能解决同步的问题,无法传递数据。使用队列可以刚方便的传递数据。

2024-10-06 13:58:01 217

原创 RTOS信号量的使用

信号量的创建,释放和获取

2024-10-06 13:13:54 177

原创 RTOS事件组的使用

通过打印,K1按下后对事件标志置位,LED线程永久等待事件标志组被唤醒。

2024-09-28 17:19:50 243

原创 线程的创建,挂起,恢复

Note的地方需要特别注意,比如这两个API都不能被中断回调函数调用(比如TIM溢出中断,接收中断等)参数指针,作为开始参数传递给线程函数。

2024-09-28 12:39:32 208

原创 stm32使用Keil创建RTOS工程

芯片选择STM32,使用Keil创建RTOS。直接使用Keil自带的RTX5,简单方便。用的API函数都一样。将void PendSV_Handler(void),void SysTick_Handler(void),void SVC_Handler(void) 这3个中断都屏蔽掉。1.在Manage Run-Time Environment上点击,添加为RTOS2(API),我这里选择了Source。分别创建2个线程 ,句柄分别为threadID_LED和threadID_Start。

2024-09-28 00:01:19 613

原创 RTOS的机制理解

任务在进入阻塞太以后,可以释放CPU控制权,用来给其它任务处理。类似阻塞态,通过调用函数 vTaskSuspend()对指定任务进行挂起,挂起后这个任务将不被执行,只。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起) , 但是当前没有运行的任务, 因为同优先。由于等待信号量,消息队列,事件标志组等而处于的状态被称之为阻塞态,另外任务调用延迟函数也。当任务处于实际运行状态被称之为运行态, 即 CPU 的使用权被这个任务占用。有调用函数 xTaskResume()才可以将这个任务从挂起态恢复。

2024-09-27 22:12:56 251

原创 RTOS的和裸机的区别

是采用超级循环(super-loops) 系统,又称前后台系统。应用程序是一个无限的循环, 循环中调用相应。的函数完成相应的操作,这部分可以看做后台行为;中断服务程序处理异步事件,这部分可以看做是前台。简单来说,就是在while(1)l里面不断去查询各种标志位,按照标志位去执行相应的功能函数。如上图所示的那样, 创建了任务并完成 OS 初始化后,就可以通过调度器来。决定任务 A, 任务 B 和任务 C 的运行, 从而实现多任务系统。后台也可以叫做任务级,前台也叫作中断级。简述下RTOS和裸机的区别。

2024-09-27 21:25:28 337

原创 RTOS延时的2种方式

RTOS的2种延时

2024-09-23 22:18:57 482

原创 RTOS的API函数

CMSIS-RTOS2的API函数

2024-09-04 14:15:25 399 1

原创 单片机的内存分布

内存分布

2023-11-01 08:27:29 173 1

原创 温控PID

温控pid

2023-10-25 16:12:04 827 1

原创 链表和队列

链表和队列

2023-10-25 14:48:12 106 1

原创 有限状态机的FSM的实现和应用

FSMC有限状态机

2023-05-10 09:09:38 259

原创 modbus协议的理解和分析

modbus rtu

2023-05-09 10:57:04 381

原创 对于函数指针的理解

函数指针的理解

2023-01-12 08:45:29 324

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除