- 博客(100)
- 收藏
- 关注
原创 设备调试--反思与总结
我写can通信滤波器的时候,可能是不过滤的;是接收所有的id报文,然后用业务逻辑过滤(比如在业务逻辑里判断id是否为符合要求的设备,再识别报文);这个时候会由于习惯(认为这个设备可以接收所有的id),推测这台设备可能坏了(波特率不对?假设工程师A是初始化时过滤id,然后我维护他的代码的时候,发现设备接收不到广播包(id:0);结果分析一通,最后才想起来“CAN初始化的时候做了过滤,只接收指定范围的id”,而有的工程师在写代码的时候,是直接在初始化的时候进行id过滤;花了更多的时间分析偏了;
2025-04-15 16:09:23
239
原创 stm32 jlink烧录时写保护
烧写失败,提示写保护了怎么办?JINk驱动安装之后,后有一个快捷方式打开它;点击确定我这颗芯片是f1的;就填2,回车显示ok就行了;接着就可以烧录了;
2025-03-03 13:43:57
719
原创 STM32F407寄存器点灯
背景描述:最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法;上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头看已经是轻舟已过万重山了。**言归正传:经常查看的是《STM32F407中文手册》,这个手册很重要!实验目的:GPIOA_pin6配置为“推挽输出模式+25MHZ”实现LED闪烁效果;业务流程:这是寄存器映射图这是GPIOA的基地址。
2024-12-18 15:14:44
912
原创 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
1029
7
原创 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
430
原创 使用Jlink打印单片机的调试信息
除去RTT_Debug.h外的其他几个文件在jlink安装目录。5.打开jlink rtt viewer。RTT_Debug.h的内容如下。1.在工程中添加6个文件。
2024-09-24 15:20:30
1021
原创 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
1647
原创 cubemx配置stm32f407vet6的can通信,can发送失败
想要实现发送,需要在MX_CAN1_Init添加。想要接收,需要在MX_CAN1_Init添加。MX_CAN1_Init函数不完全;一直提示can发送error;
2024-08-23 09:58:19
490
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
960
原创 f407_demo\f407_demo.axf: Error: L6218E: Undefined symbol assert_param (referred from softtimer.o).
解决方法:添加头文件。
2024-07-10 09:23:33
189
原创 stm32f407VET6 can通信踩坑
2)如图,原理图上在mcu和TJA105连接时,使用0欧姆电阻;硬件工程师给我一块板子,并且和我说,板子上的can通信相关的部分都正常(线序,虚焊这些都没问题);但是硬件工程师没焊接这2个0欧姆电阻,导致mcu的can口信号给不到TJA1075!1)使用已经出货的版本的固件,烧录在这块板子上。(如果can通信有问题,那就是硬件导致的);1)TJA105要5V供电,但实际上没供电,导致TJA105不工作(硬件工程师说 画错了);1)在老版本代码上添加了can.c相关,也许有问题;
2024-05-22 11:51:06
600
原创 cubemx配置stm32f407VET6实现can通信
参考博客:https://blog.youkuaiyun.com/weixin_43362027/article/details/132716496。移植canopen的前提是can通信正常,现在添加一下can通信(先用标准帧,250K bit/S的波特率测试)项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块(该模块采用canopen通信)3)实现can接收;我实现的业务逻辑是在can接收回调函数中串口打印接收到的can包。can1的时钟在APB1上,APB1的时钟为84MHZ;1)如何计算波特率?
2024-05-15 16:28:08
1604
2
原创 cubemx配置stm32f407VET6实现USB虚拟串口
5)配置USB_DEVICE为communication Device Class(CDC)第一步:在文件 usbd_cdc_if.c中 的 函数添加一行代码用于获取字符串长度;最近做项目需要使用USB,一根数据线连接“mcu的板子”和“电脑”;在usb_device.c中实现业务逻辑“USB数据回显函数”1)仅使用MCU的USB发送数据(注意波特率可以是任意值)电脑上的串口助手通过USB线和mcu的USB通信;接下来的方法是之前一个同事写的,我直接搬运一下;2)测试mcu的USB接收功能。
2024-05-15 13:33:37
978
原创 hal库定时器中断的使用
5)验证:定时器每溢出一次,会触发1次溢出中断,在中断的回调函数中进行串口打印“hello world\r\n”2)定时器3 预分频720,所以72MHZ进行720分频后,频率为100KHZ;即1秒计数100000次;3)定时器3配置为向上计数,自动重装载值为9999;即0.1秒溢出1次;验证定时器中断的回调函数功能;1)cubemx配置定时器3和串口2;4)串口2设置为115200波特率。
2024-05-09 09:19:11
647
原创 c8t6,hal库,pwm输出
(249指的500个计数值的周期内,有250个计数值为低电平,,有250个计数值为高电平,占空比为50%)自动重装载计数值设置为499;即0.5ms一个周期;1MHZ即1秒计数1000000次;自动重装在计数值:499;即1毫秒计数1000次;定时器1通道1发送脉冲;1.cubemx配置。设置分配系数:71;
2024-03-08 14:19:17
510
原创 逻辑分析仪分析硬件spi
如图,数据解析为0000 0001 ,即0x01,和程序一致;发送5个字节:1,2,3,4,5;数据高位在前,低位在后;
2024-03-07 13:00:45
1339
2
原创 基于hal库实现stm32f103c8t6裸机项目的“软件定时器”
一,项目背景:优化裸机项目,考虑到硬件资源有限,所以不移植rtos,采用的方案是“软件定时器+状态机”注意点:软件定时器的任务要求短小精悍,要在定时时间到达前运行完毕。原因:未做保存现场和恢复现场。二,下面是cubemx的配置:我还做了其他功能,但是这里仅描述“时钟配置”,“定时器配置”(1)时钟72MHZ(2)定时器2通道1设计要求:主频72MHZ,软件定时器的时基为1ms;定时器参数解读:(2)per:9。
2024-01-31 13:32:44
2347
原创 stm32裸机添加“软件定时器”
软件定时器对应的任务要短小精悍(在定时时间到达之前执行完毕),原因是“只是简单的定时,未做保存现场和恢复现场,所以程序在定时时间到达时仍无执行完毕会导致异常”近期想要优化逻辑程序,想到可以通过软件定时器实现优化。这是一种基于时间片的轮询机制,在裸机项目中这种软件定时器+状态机的方案可以满足基本需求。代码:参考https://blog.youkuaiyun.com/qq_26904271/article/details/83833168。
2024-01-30 10:55:17
514
原创 16-1网络编程
UDP:面向报文,特点是数据量大(不关心是否连接成功,只关心下发数据);TCP:面向连接,特点是数据准确(确保连接成功再通信);初级开发不用了解怎么实现协议,只要了解怎么使用;IP地址,端口号(用于标识和哪个服务器对接);通信协议(http,TCP/UDP);
2023-06-04 15:07:50
144
原创 V9.0_增加信号的功能(信号的基本用法)
之前需学习过信号的基本用法;比如通过signal()和自定义的handle()来处理信号; 或者通过kill(pid,9);来杀死指定进程;本次实验的目的是:在使用自定义ls功能时,子进程使用popen实现ls后向共享内存发送子进程的IID号。父进程通过读取共享内存获取子进程的ID号并使用kill杀死子进程,然后父进程退出。父子进程的任务: 子进程实现“ls”,然后把子进程ID发送到共享内存 父进程从共享内存读子进程的ID并使用kill()杀死子进程 运行结果main.cio.cio..h
2023-06-04 11:38:28
175
原创 V8.0_增加共享内存功能
功能:使用自定义delete指令删除指定文件时:子进程执行完删除任务后会调用自定义函数(创建共享内存,向里面写入数据"had delete file"),接着exit();此时因wait()而处于阻塞状态的父进程解除阻塞,并调用自定义函数(打开共享内存读取数据)从共享内存读数据。
2023-06-01 12:15:18
175
原创 V7.0_增加消息队列功能
使用自定义copy功能时,子进程copy结束后向父进程发送消息(通过消息队列)然后exit;此时因wait()而处于阻塞态的父进程终于解除了阻塞并且从队列中读取到消息;
2023-05-30 18:06:35
96
原创 V6.0_增加fifo功能(在使用自定义write指令时,父进程创建fifo并以只读方式打开fifo会导致父进程被阻塞。子进程中读取终端输入的指令并记录在file中,输入QUIT结束文本编辑后,子进)
在使用自定义write指令时,父进程创建fifo并以只读方式打开fifo会导致父进程被阻塞。子进程中读取终端输入的指令并记录在file中,输入QUIT结束文本编辑后,子进程以只写的方式打开fifo,从而解除父进程的阻塞,父进程读取完fifo的消息后结束进程。运行结果:如图,(1)父进程通过(2)创建file并编辑完文本后,通过fifo 子进程向父进程发送消息(88888888),父进程可以接收到(88888888)
2023-05-30 16:25:36
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人