- 博客(116)
- 收藏
- 关注
原创 STM32F103通过L298N驱动两相4线步进电机【42步进电机】
二、准备阶段(stm32单片机,L298N模块,42步进电机,螺丝刀,杜邦线,串口工具)1)主控:stm32f103c8t6。L298N驱动42步进电机。2)驱动器 : L298N。3)电机:42步进电机。4)驱动方式:4拍驱动。
2025-12-10 13:34:11
222
原创 freertos---多任务竞争同一资源导致死机----问题定位(串口DMA资源被竞争导致的奔溃)
简单的说,在执行AT24C02_TEST()函数时调用了USART2_printf【实际上使用了DMA资源】,在此期间如果TICK钩子函数触发1S打印一次的条件时页使用DMA资源,但是用户没有对USART2_printf的DMA资源进行保护,由于TICK钩子函数的优先级高,Tick钩子属于中断上下文(高优先级),EEPROM操作属于任务上下文(低优先级),两者直接操作同一串口硬件,且无同步机制,形成冲突。不可能为了省事直接调用HAL_UART_Transmit这种阻塞接口,
2025-10-11 14:30:31
395
原创 为at24c02做地址映射
2048bit256字节每页16字节,一共128页。地址映射:每4字节划分为1个区域,即1个变量占4字节存入eeprom;
2025-10-11 09:59:50
362
原创 为嵌入式项目增加多级调试信息-----显示等级,文件名,行号,函数名,和调试信息
如果配合自定义的串口助手,效果更好,这个串口助手可以识别包头里的[DEBUG],[INFO],[ERROR]等,根据不同的等级打印不同的颜色;
2025-10-11 09:02:02
265
原创 freertos专题---消息队列
本篇用于描述freertos里【消息队列的使用原因】,【消息队列的使用场景】,【消息队列的API介绍】,【消息队列使用方法(配合实际代码)】,和【消息队列的底层机制】参数:UBaseType_t uxQueueLength:设置消息队列长度;UBaseType_t uxItemSize:设置消息队列中单个消息的大小;函数说明创建函数,实际上使用还是调用函数 xQueueGenericCreate()完成消息队列创建工作。当消息队列创建成功时,返回一个消息队列的控制句柄。
2025-09-30 14:37:06
960
原创 freertos-----串口通信框架(初版,丢包率低)
freertos下实现串口高效处理,115200波特率不丢包;:测试回显709776字节,未丢包。
2025-09-24 10:46:33
573
原创 串口通信丢包率低的版本--115200波特率--1ms频率通信--几乎不丢包
2-串口DMA接收+空闲中断 用来判断1次数据包的接收。注意在中断服务函数里添加串口1的idle。如图:回显测试21万字节左右,无丢包。main死循环里添加业务逻辑。初始化的时候添加DMA接收。3-DMA发送+双缓冲区。
2025-08-19 09:34:47
140
原创 串口通信性能优化
2)在软件定时器里添加的任务里,串口解析是1ms1次,这个频率对于自定义的调度器来说压力比较大。2.5ms一次通信测试,但是关闭软件定时器,把串口解析放到main的死循环里,大多数指令不丢包,只有查表算法的相关指令丢包。在User_Creat_Task()里把,USART_RX_Monitor_Thread()注释掉;1.软件定时器的定时器中断,冲掉了串口中断【不确定是不是这个原因,但是肯定和中断或调度器有关】3)把实时性高的任务剥离出来,放到main函数的死循环,不放在调度器里。
2025-07-15 08:46:03
1174
1
原创 2相4线混合式步进电机---42步进电机简介
----------略----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2025-07-09 16:39:31
1430
原创 设备调试--反思与总结
我写can通信滤波器的时候,可能是不过滤的;是接收所有的id报文,然后用业务逻辑过滤(比如在业务逻辑里判断id是否为符合要求的设备,再识别报文);这个时候会由于习惯(认为这个设备可以接收所有的id),推测这台设备可能坏了(波特率不对?假设工程师A是初始化时过滤id,然后我维护他的代码的时候,发现设备接收不到广播包(id:0);结果分析一通,最后才想起来“CAN初始化的时候做了过滤,只接收指定范围的id”,而有的工程师在写代码的时候,是直接在初始化的时候进行id过滤;花了更多的时间分析偏了;
2025-04-15 16:09:23
364
原创 stm32 jlink烧录时写保护
烧写失败,提示写保护了怎么办?JINk驱动安装之后,后有一个快捷方式打开它;点击确定我这颗芯片是f1的;就填2,回车显示ok就行了;接着就可以烧录了;
2025-03-03 13:43:57
1702
原创 STM32F407寄存器点灯
背景描述:最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法;上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头看已经是轻舟已过万重山了。**言归正传:经常查看的是《STM32F407中文手册》,这个手册很重要!实验目的:GPIOA_pin6配置为“推挽输出模式+25MHZ”实现LED闪烁效果;业务流程:这是寄存器映射图这是GPIOA的基地址。
2024-12-18 15:14:44
1007
原创 STM32f407VET6 IAP固件升级,bootloader+双APP区
简单的IAP技术是:boot分区+1个APP区;在升级的过程中,boot程序会把原先的APP区擦除,再把新的bin文件拷贝到APP区,完成升级;风险:在升级过程中突然断电,会导致原先的APP被擦除,新的APP未成功写入,设备变砖,无法通过预留的通信接口升级程序,只能程序烧录。考虑到这种风险:现在将flash分区划为3分区:boot区+APP1区+APP2区;APP1存储老固件;APP2存储新固件;总结:上述操作的目的是:保证flash上在同一时刻至少有1份可使用的APP;
2024-12-12 11:23:33
1688
8
原创 STM32F407VET6单片机的IAP技术---APP部分
会跳转到APP的起始地址0x8010000,不会跳转到bootloader的起始地址。默认的NVIC地址是 VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;如果在bootloader中跳转到的APP地址是0x8010000,那么我们只要把VECT_TAB_OFFSET的宏修改为0x10000就可以了;2)串口1回复boot V\r\n 或者不回复,因为用来测试的上位机是网上找的,不是我开发的。修改后的NVIC地址:0x8010000。3-业务逻辑中添加RESET功能。
2024-12-10 11:24:01
544
原创 使用Jlink打印单片机的调试信息
除去RTT_Debug.h外的其他几个文件在jlink安装目录。5.打开jlink rtt viewer。RTT_Debug.h的内容如下。1.在工程中添加6个文件。
2024-09-24 15:20:30
1165
原创 stm32 IIC总线busy解决方法
3) 在HAL_I2C_Mem_Write()之前,先判断是否busy,如果busy就调用I2C_Busy_C();-------------->再调用HAL_I2C_Mem_Write();调用HAL_I2C_Mem_Write()之前,先判断是否busy,如果busy则重新初始化,初始化结束后,再HAL_I2C_Mem_Write();我根据参考的博客在 HAL_I2C_MspInit() 中添加了2行代码;3----在HAL_I2C_Mem_Write()时会busy,
2024-09-12 11:22:07
1963
原创 cubemx配置stm32f407vet6的can通信,can发送失败
想要实现发送,需要在MX_CAN1_Init添加。想要接收,需要在MX_CAN1_Init添加。MX_CAN1_Init函数不完全;一直提示can发送error;
2024-08-23 09:58:19
647
1
原创 pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
出现报错““ModuleNotFoundError: No module named ‘PySide2’””后,看来很多博客,都不能解决,只有这篇博客提供了思路;2).ui转化为.py后,点击运行,报错““ModuleNotFoundError: No module named ‘PySide2’””https://blog.youkuaiyun.com/weixin_61891798/article/details/127097989。按照博客的指引,和命令行的提示,我找到了pyside2的包;
2024-08-01 16:56:32
1214
原创 f407_demo\f407_demo.axf: Error: L6218E: Undefined symbol assert_param (referred from softtimer.o).
解决方法:添加头文件。
2024-07-10 09:23:33
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅