avatar
Articles
127
Tags
0
Categories
17
首页
归档
友链
李瑞琦的博客
首页
归档
友链

李瑞琦的博客

串口通信进制问题
Updated2025-10-31|05-MCU
串口通信进制问题由于UART一般通信帧是8 bit,所以通常以ASIIC码的形式进行传输,但也可以用一位16进制数来进行传输。 常见的串口助手默认发送的都是字符型比如’5’,或者说ASIIC码的形式,如果要发送16进制数,需要选择16进制发送,比如要发0xFF,串口助手这里发送写成FF就行,但单片机的的if中必须写成0XFF Python发送16进制数先用bytearry打包,然后serial.write就行了
优秀的程序结构
Updated2025-10-31|05-MCU
记录从网上一些大佬的代码中学习到的比较好的代码结构,有助于简化编程。 1.main.cpp和CUBE生成的main.c分开放,在main.cpp中定义用户函数Main(),放到main.c的main()中。这样即使CUBE再生成也不会覆盖了。 2.稚晖君在Main()中做了如下的事情: Main(){电机:绑定驱动、编码器、初始化按键:绑定回调函数开启定时器主循环} 3.在main.cpp中,它还定义了一堆定时器的Event Callbacks,按键回调函数的实现。 4.定时器中断函数不要直接写在Cube给我们定义的接口中,可以自己定一个函数,比如Tim1Callback100Hz(),然后把这个函数放进定时器的IRQHandler中调用就行了,比较直观。 5.如果一个类需要定时器作为时间基准,那么就定义.Tick()函数,并放到定时器的回调函数中。然后在类中定义_Elapsedtime这个变量记录时间。 Tick函数的内容一般就是:给类中的_Elapsedtime变量加时间;如果涉及状态机,则在Tick()里面更新状态,并调用回调函数。手表的PageManager类就是这样的。
旅游机器人赛后总结
Updated2025-10-31|05-MCU
旅游机器人赛后总结1.硬件介绍1.主控:STM32F103ZET6 2.用到的传感器:     a.8路灰度传感器     b.光电传感器     c.MPU6050     d.色标传感器 3.小车结构: ...
电赛赛后总结
Updated2025-10-31|05-MCU
电赛赛后总结        本次电赛采用MSP430F5529作为主控,做了2台寻迹小车。最后评测时并没能实现之前已经调好的功能,主要原因我认为是评测场地和学校的场地摩擦力还是差别有点大,导致主车在第三问转到内圈时转不过去。之前从车速度调高了之后老是跑出黑线外,在评测这边却没有出现该问题,导致从车会跟主车的距离过近。 虽然结果一般,但是我还是学到了一些东西: 1.传感器采集数据我之前那种宏定义的方法不太好,会多次重复读取,读取一次把各个传感器的数据放到一个数组里,再把该数组宏定义会更好。 2.寻迹的PID不一定只要P,可以加上D,会加速调整。 3.传感器采集数据可以不放在while1里,而放在一个ms级别的定时器中断内,这样可以保证采样周期一直不变。 4.尽量所有环节都闭环,如果最后那个主车用的是灰度的转弯办法应该就可以到内圈了…
FreeRTOS
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS线程管理TCB线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等,详细定义如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253typedef struct tskTaskControlBlock{ // 1. 栈指针 - 最重要的成员之一 // 当任务被切换时,它的当前上下文(寄存器值)就保存在这个栈顶。 volatile StackType_t * pxTopOfStack; // 2. 任务状态链表项 // 用于将TCB插入到不同的状态列表中(如就绪列表、阻塞列表、挂起列表)。 ListItem_t xStateListItem; // 3. 事件链表项 // 用于将TCB插入到事件列表(如队列、信号量)中,当任务因等待事件而阻塞时使用。 ...
FreeRTOS_任务状态
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS(2)任务状态除了运行状态之外的状态统称为非运行状态。因为 FreeRTOS 是为单CPU设计的系统,在任何时刻最多只能允许一个任务处在运行状态,哪怕看起来好像有多个任务同时在运行——这只是多个任务不停地切换带来的效果。当一个任务从运行状态切换到非运行状态时,执行时的现场——CPU寄存器被保存在任务的私有堆栈中;在重新回到运行状态时,再从堆栈中恢复之间保存的寄存器。这是任务调度的最基本功能。 1.就绪的任务   ==FreeRTOS 任务的就绪状态表示任务目前没有被执行,但随时可以被执行。当下一次任务切换时机到来时,FreeRTOS 将从就绪任务的列表中选择优先级最高的任务,切换成运行状态。==  任务优先级是任务的一个属性,FreeRTOS 用整型数表示优先级,最低优先级为0, 最高为 configMAX_PRIORITIES 宏定义的值减去1. 创建任务的时候需要指定一个优先级,在创建之后也可以再通过 vTaskPrioritySet()...
FreeRTOS_信号量
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS(4)信号量 信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要包含semphr.h头文件。 一、创建信号量 ==二进制信号量==创建实际上是直接使用通用队列创建函数xQueueGenericCreate()。创建二进制信号量API接口实际上是一个宏,定义如下: 123456789#define xSemaphoreCreateBinary() \ xQueueGenericCreate( \ ( UBaseType_t ) 1, \ semSEMAPHORE_QUEUE_ITEM_LENGTH, \ NULL, \ NULL, \ ...
FreeRTOS_命名规则
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS(1)命名规则1. 命名规则RTOS内核和演示例程源代码使用以下规则: > 变量uint32_t:前缀 ul,u 表示 unsigned,l 表示 long uint16_t:前缀 us,s 表示 short uint8_t:前缀 uc,c 表示 char 非 stdint 类型的变量使用前缀 x,比如基本的 Type_t 和 TickType_t 类型 非 stdint 类型的无符号变量使用前缀 ux,比如 UbaseType_t(unsigned BaseType_t) size_t 类型的变量使用前缀 x 枚举类型变量使用前缀 e 指针类型变量在类型基础上附加前缀 p,比如指向 uint16_t 的指针变量前缀为 pus char 类型变量前缀为 c char * 类型变量前缀为 pc 举例: 12size_t xQueueSizeInBytes;uint8_t * pucQueueStorage; > 函数在文件作用域范围的函数前缀为 prv(一般定义是 static) API 函数的前缀为它们的返回类型,当返回为空时,前缀为...
FreeRTOS_常用API
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS(3)常用API==FreeRTOS中任务优先级数值越大,优先级越高,和HAL库相反== 1.创建任务1234567891011121314BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务函数 const char * const pcName, //任务名字 const uint16_t usStackDepth, //任务堆栈大小 void * const pvParameters, //传递给任务函数的参数 UBaseType_t uxPriority, //任务优先级 TaskHandle_t * const pxCreatedTask ) //任务句柄//pxTaskCode : 任务函数 //PCName :...
FreeRTOS_移植
Updated2025-10-31|05-MCU01-FreeRTOS
FreeRTOS(0)移植1.在文件根目录下创建Freertos文件夹,把源码拷贝 2.在Keil中创建三个文件夹,分别添加.c和.h 其中port.c 如果用的编译器version5,从RVDS文件夹添加。如果用的version 6,从GCC添加 头文件只用选3个文件夹 3.由于命名冲突,注释掉stm32f4xx_it.c中 void SVC_Handler(void) void PendSV_Handler(void)这两个函数 4.修改systic_Handler函数 12345678910111213void SysTick_Handler(void){ /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ ...
1…91011…13
avatar
Li Ruiqi
总有低谷
Articles
127
Tags
0
Categories
17
Follow Me
Categories
  • 01-计算机基础八股12
  • 02-开发工具12
    • CMake7
  • 03-C++14
  • 04-Linux52
    • 01-Linux基本操作8
    • 02-系统移植9
    • 03-内核开发24
    • 04-应用开发8
    • 05-安卓开发3
  • 05-MCU28
    • 01-FreeRTOS7
    • 02-STM329
    • 03-MSP4304
    • 04-LVGL4
  • 06-嵌入式硬件5
  • 07-RISC-V4
Website Info
Article Count :
127
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By Li Ruiqi
Framework Hexo|Theme Butterfly
人因梦想而伟大