stm
文章平均质量分 56
wandersky0822
这个作者很懒,什么都没留下…
展开
-
图形化的调试工具 j-scope systemview
jscope rtt原创 2023-03-01 10:18:04 · 1178 阅读 · 0 评论 -
stm32在IAP擦除sector时会停止取指操作,也就是MCU卡住了
根本原因stm32在IAP时会停止取指操作,也就是MCU卡住了,这是根本的问题,导致我在研发产品过程中遇到过很多难点。问题:我做的都是工业产品,STM32基本不用内部看门狗,要外挂硬件看门狗,常用的硬件看门狗DS1832的复位时间是1秒多,而且这个看门狗是不能关闭的,也就是一上电就一直运行,无论任何情况下,如果喂狗不及时,就会复位。我的产品支持远程升级功能,也就预示着要做IAP操作,STM32内部的FLASH擦除时间如下:按最快的32位擦除来算,典型值1秒,最慢达2秒,而在擦除期间FLA原创 2022-03-30 17:31:19 · 1962 阅读 · 2 评论 -
中断向量地址__Vectors,__Vectors_End, __Vectors_Size的使用
中断向量原创 2022-03-29 18:45:31 · 4432 阅读 · 0 评论 -
中文语音库学习
汉字语音库原创 2022-02-15 15:55:19 · 2843 阅读 · 0 评论 -
USB复合设备调试 STM32
空间STM32 USB复合设备调试过程,复合设备一般要用到IAD(接口关联描述符),但是我在网上下载的几个例程都没有用到IAD,最后发现如果USB复合设备只用到两个接口,即复合的两个功能(MSC & HID)各占用一个接口,这种情况是不需要用IAD的。我是这样做的:直接在ST提供的MSC例程上修改,在MSC的配置描述符后面添加一个interface(HID接口),接口描述符不熟悉,直接在网上拷贝一个成功的例程,这一步的问题不大,HID设备还需要一个报告描述符...原创 2018-03-01 21:00:00 · 4048 阅读 · 0 评论 -
STM32F437 CAN错误(一个不发送CAN数据的节点,是会影响CAN总线的)
终于解决综合插件CAN导致 刷揭示错误的问题,过程记录一下,有的时候,很多错误是可以避免的,但是一旦出现 , 解决、排查错误的过程会区级费很长时间。我们的产品有3、4个CAN节点,我负责的这个节点只接收,不发送,因此当CAN问题出现时,我第一感觉认为肯定不是我的问题。(一个不发送CAN数据的节点,怎么会影响CAN总线?)刚开始,我就排除,把每一个节点都断开一遍, 最终发现把我负责的那个节点断开后,CAN正常了,这基本说明是我的板子引起的CAN故障,但是我没有发送数据呀?难道是我不经意间发数据了.原创 2021-12-16 19:23:21 · 3402 阅读 · 1 评论 -
通过srec_cat工具在bin文件中增加长度信息
@echo offECHO Designed by Willow.JECHO Add CRC32 At the end of the documentECHO -------------------------------------SET SREC_PATH=C:SRECfor /f %%i in ('dir /b .raw.bin') do (set indexdx=%%~zi)ECHO %indexdx%ECHO %SREC_PATH%srec_cat.exe raw.bin原创 2021-12-03 14:05:04 · 3517 阅读 · 0 评论 -
stm32h743 FDCAN使用...
CAN帧分为数据帧与远程帧数据帧又分为 标准帧与扩展帧FD-CAN多出3个位,如下:EDL 扩展数据长度BRS (数据)波特率切换ESL 错误状态指示器下图看看STM32H743的CAN结构,不知道这是CAN协议标准就让这么设计的,还是ST公司自己开发的,从这个图可以看出,FD-CAN分为3部分,CCU FDCAN, RAM,其中FDCAN其实是由2部分组成,FDCAN1 FDCAN2,这2个是相互独立的单元,它们2个共享一个RAM区,CCU是时钟校准单元,我看了好半天,也没原创 2021-12-01 17:04:20 · 2045 阅读 · 1 评论 -
MCU加密 思路
读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法1,避免程序中直接出现0x1FFFF7E8 唯一码地址,可以用一个计算得到,比如0x1FFF0000+0x0000F7E8,或者更复杂的乘法,2. 检测到非法的设备上运行时,不要马上死机,要延迟一段时间再爆发,这样更恐怖。3. 如果能远程控制就更好了,远程控制4....原创 2021-10-27 10:27:55 · 552 阅读 · 0 评论 -
stm32 应用程序跳转到系统boot
STM32F2STM32F4 的System memory 地址从0x1FFF0000开始的,我看了最新的HAL库,里面也没有System memory 的地址定义,看来ST官方是不想让我们用系统BOOT中的功能了,但是鉴于ST系统bootloader的稳定性与可靠性,还有ISP上位机的丰富性、通用性,用起来还是很不错了,怎么从应用跳转到bootloader呢,可以使用下面的函数,Jump_To_APP(0x1FFF0000),就直接进入到系统bootloader中了,void Jump..原创 2021-10-22 11:30:12 · 2449 阅读 · 0 评论 -
CANable 介绍
CANABLE 一个比较牛X的开源CAN盒,包括硬件、软件、上位机通过USB与PC通信,采用WINUSB无驱的方式,非常方便。参考:An Open-Source USB to CAN Adapter - CANable扒一个超棒的stm32的开源usb-can项目,canable及PCAN固件 (amobbs.com 阿莫电子论坛)...原创 2021-10-13 14:38:14 · 6568 阅读 · 1 评论 -
WINUSB STM32移植参考
1为什么用WINUSB?据说WINUSB是免驱的,那HID也是免驱的,用HID不是一样吗?不一样! HID采用中断传输,传输速度上不去,如果是使用的是USB2.0 FULL speed,那速度更低,可能很多场合都满足不了了。但是WINUSB就不一样了,winusb可以采用批量传输,数据吞吐量大大提高。2 WINUSB对下位机的要求我参考了2个例子,一个老外的一个国内的。都 是在stm32上实现WINUSB功能,我大概看了下程序,并认真分析了,这2个例子都是从STM32 CDC例子修改来的,.原创 2021-10-12 19:30:49 · 4974 阅读 · 1 评论 -
MDK arm 动态加载 系统应用分离 symdefs
这个东西可以应用在很多场合,1.我有一个函数,不想给客户提供源码,连库也不想提供,就可以只提供一个bin文件,再提供一个symdefs格式的文件。2. 为了升级维护方便,我想把RTOS APP彻底分离,以取代现在的RTOS编译成一个lib的形式提供给APP使用, 但是要升级程序时,需要把整个固件升级,如果 是RTOS 、APP分离的话,只需要升级 APP就可以了。上面就是现实意义。...原创 2021-09-18 09:31:48 · 774 阅读 · 0 评论 -
MSH FINSH 对比
内在的区别我也没看明白,我就把我看到的区别总结下:最明显的,msh命令都带一个__cmd_, 而finsh命令不带,__cmd_这个前缀是宏定义时加的,使用FINSH_FUNCTION_EXPORT_ALIA 、MSH_CMD_EXPORT这2个宏义就会把命令定义成MSH命令,官方手册也提到了,MSH执行效果FINSH执行效果finSH需要在命令后面加上(),美其名曰 “C-Style” 模式,MSH -> exit -> FINSHFINSH-&...原创 2021-09-16 15:32:51 · 1106 阅读 · 2 评论 -
cortex M7 MPU 总结
其实MPU的精华就在下面这个表中,通过上面几个配置位的设置,可以配置为3种内存形式1. 最强顺序 strongly ordered2. 设备类型 DEVICE Memory3 一般内存 Normal Memory其中strongly ordered、DEVICE Memory对外设的访问严格按照FMC配置的总线位数来访问,如果没有字节对齐,会报总线错误,share这个配置也很好理解,share是与多核、多主访问外设配置的,如果是单核MCU应该是不需要吧。其它几个都是一般内存.原创 2021-09-10 10:16:09 · 1431 阅读 · 1 评论 -
stm32h743外部RAM非字节对齐访问,引起的hard fault
出处:https://www.yiboard.com/thread-646-1-1.html此文作者与我遇到的情况非常相似,我先说说我遇到的情况:由于公司的STM32F437买不来了,价格500+, 但是STM32H743却只有200+,于是我收到了一个任务,用STM32H743替换之前的F437; 调试还算顺利,问题一一解决了,直到今天遇到 个hard fault,做嵌入式的人估计都知道,这错误谁遇到谁头痛;于是我先在网上搜了一下,没有人遇到过。车到山前必有路,于是我硬着头皮开始定位错误,..原创 2021-09-09 17:37:16 · 2756 阅读 · 0 评论 -
一个奇怪的问题 mcp25625清除发送中断的问题
下面是在STM32H743上操作的。void CAN_handler(CANNUM can){ #include "bsp_gpio.h" uint8_t g_canintf; g_canintf= CAN_SPI_CMD(can, SPI_CMD_READ,TOLONG(&(MCP2515_MAP->CANINTF)), ARG_UNUSED, ARG_UNUSED ); if(g_canintf&0x1c) /...原创 2021-08-28 13:48:03 · 708 阅读 · 1 评论 -
单总线通信 多机
LIN (12V电平,与串口类似,stm32中可以用串口实现LIN)STM32单片机串口有一个模式( single wire)one wire (这个不能说是吧,这是一个主芯片到从外设slave的通讯方式,比如温度传感器)STM32单线串口应该在特定场合还是很有用...原创 2021-08-10 10:27:18 · 662 阅读 · 0 评论 -
FFS学习 (FTL)
其实这个FTL我去年就弄完了,而且已经在项目上使用了,但是这几天一天,又忘了差不多了,因此,我决定把这个东西详细认真的再好好看看,趁着还有残留的记忆,巩固一下知识。 这个软件真的很好,软件为为3层,FS, FTL, LLD,非常清晰,这也是当初能够顺利移植成功的原因。先上图吧,这个图简单明了了展现出了此软件的结构,上层为文件系统,有spasion公司自己的FS,因为软件良...原创 2019-07-29 21:15:00 · 2017 阅读 · 0 评论 -
一个很巧妙的RS485通信
RS485通信,熟的很,一般来说这种半双工总线上挂载的设备,只有一个是主,其它都是从设备,而且设备上电前,所有设备的地址已经固定写死了,这样上电后,主设备就会原创 2021-06-01 16:17:30 · 2464 阅读 · 0 评论 -
十几年工作经验总结的单片机编程思想
1.死循环2.状态机3软件分层(裸机程序非阻塞!)我的总结是认真的,不是搞笑的!!!原创 2021-06-01 15:26:17 · 679 阅读 · 0 评论 -
stm32 模拟U盘IAP升级 与 FAT16文件系统
如果用的MCU有USB接口,那么使用模拟U盘升级程序,不失为一个好办法,因为第1,模拟U盘,不需要驱动,也不需要上位机,现场操作非常方便,第2,USB传输速度快,升级过程耗时少,且可靠。这项技术的难点在于FAT16文件系统,因为STM32并没有真正的实现一个FAT文件系统,一切都是模拟的,这要求研发者对FAT16文件系统认识的非常深刻。下面为FAT16系统的简易结构图:首先是DBR引导扇区,这里面保存着很多参数,这个不要求 每个参数都弄懂,这个数据也可以直接从一个小U盘中用winhex软原创 2021-05-20 11:34:50 · 2041 阅读 · 1 评论 -
HEX BIN互相转换
2个办法1.srec_cat.exe这个工具功能强大,之前我用 这个工具在xxx.bin的最后添加了crc32校验,其实这个工具也可以实现hex与bin之间的相互转换。命令如下:(注意:stm32生成的hex地址是从0x800000开始的,因此需要把8000000之前的过滤掉!)2. 使用下面这个小工具,这个小工具就不用讲了,典型的windows程序,这2个工具我都上传了,地址是:...原创 2021-05-14 14:40:13 · 2119 阅读 · 0 评论 -
8位PCM编码转换16位PCM
WAV格式的音频文件,如果是没有经过压缩的,那里面PCM编译的数据,也就是最原始的采用数据。根据采样位数的不同,常见的有8bit PCM数据,16bit PCM数据, 由于种种原因,有时可能会遇到8bit 与16bit PCM编码之间相互转换的情况, 8bit转换为16ibt PCM的过程首先明确一点的时,8b PCM采样数据中是无符号数据, 而16b PCM采样数据中是有符号数据,因此8bit PCM转换为16bit PCM时,必须先把无符号数据转换为有符号数,下面给出一个简单...原创 2021-03-24 20:07:30 · 5724 阅读 · 1 评论 -
stm32输出音频总结(规划一定要先进,代码一定要漂亮!)
stm32输出音频,有2种方法,第一种比较常规, 使用I2S接口的音频codec芯片, 常用的有wm8978等, 我之前用过这个芯片,调试耗费了很长时间,最后完美的实现了通过wm8978录音与播放功能,并且实现了MP3的压缩与解码功能,全部使用软编解码。程序的精华是 在HAL库上实现DMA双缓冲播放声音, 原生的HAL库I2S不支持双缓冲...原创 2021-03-23 16:42:40 · 7566 阅读 · 1 评论 -
步进电机驱动器分类
最近公司使用步进电机控制火车大灯的偏转方向,因此在网上恶补了下步进电机驱动器相关知识。以下是我的总结,也不一定正确,不过我是我的理解。看了这么多,电机驱动芯片有3类1. TB6600 L6474 这类驱动比较高级,直接就是MCU通过SPI/UART发命令给驱动芯片, 驱动控制电机动作。2. TB6600 是通过脉冲驱动,不过是2种脉冲, 转速 方向 使能。而直接驱动电机的脉冲是经过芯片译码出来的。3, 低级 ULN2003 就是一个放大器的作用, 把输入的脉冲增强驱动能力后 接...原创 2021-03-18 08:57:44 · 2106 阅读 · 0 评论 -
AC6(CLANG)下变量 绝对定位的方法
从AC5转到AC6,很多关键字都不一样, 比如 这个绝对定位的方法,原创 2021-02-20 16:07:03 · 1090 阅读 · 0 评论 -
superIO通过PS2接口扩展键盘
刚毕业06年时是做过USB键盘鼠标的驱动,当时没有保存资料,现在也想不起来了,现在要在工控模块上扩展键盘,突然发现superIO上扩展的有PS2键盘鼠标接口,superIO为什么要扩展这么落后的东西呢,因为superIO本来就是为落后的应用来用的,工业级的东西,一般都比较落后,看看都扩展了什么,串门,好几个呢,现在的电脑、笔记本应该都看不到串口了,但在工业领域这东西简直是万能的,几乎所有的工业产品上都有,并口,我毕业的时候基本都不怎么用了。软驱, 相信90后的程序员都没见过。我大学报到第原创 2020-07-23 14:41:27 · 631 阅读 · 1 评论 -
STM32F051 ADC 自我理解
好久不搞ADC了,这次需要采集一个光敏电阻,使用stm32f051只看文档,看的一头雾水,看过这个结构图之后,心里有点明了,我之前用stm32f407采集过电池电压,但那时候直接用的安富莱的库和例程,没怎么深入研究,这次只能自己做了,把文档基本看了一遍,结合这个框图,还是很容易的,但过程不易 输入: 外部输入ADC_IN[15:0] 内部也有几个,bat 温度节温等。触发开始信号: 软件触发, TIM触发, 自动循环转换(只触发一次)AD值传输: 框图左上角, 方法2种...原创 2020-07-22 11:03:03 · 841 阅读 · 0 评论 -
RTT 网口驱动分析
RTT 网口驱动的核心是这个文件ethernetif.c此文件定义了网口驱动的架构,还有几个常用的命令,比如list_if set_if() set_dns(),eth_device_init()- >eth_device_init_with_flag(), 这些是在具体网卡芯片的驱动初始化里调用 的,比如我用的ksz8851我的驱动初始化是rt_hw_ksz8851a_init()这个网卡核心数据结构体也,也很重要的在rt_hw_ksz8851a_init()及其随后的.原创 2020-06-10 16:23:04 · 1224 阅读 · 0 评论 -
stm32 option byte 恢复出厂值
公司的STM32F437可以正常烧写程序,就是不能启动。怎么擦除就是不行,突然我对比了正常片子option byte,发现了问题下面是有问题的芯片的OP下面是正常芯片的OP在网上找了一下怎么复位STM32 的option byte.jlinkstm32.exe,找到这个文件。打开,选择5 stm32f4xx系列, 就自动恢复出厂值Optin byte...原创 2020-03-18 10:26:46 · 2187 阅读 · 0 评论 -
分享一个原创的地球上点到线的距离计算方法
这个程序已经STM32上实现,描述如下,已知一条直线,直线的2端的GPS坐标已经精确测定,分别是(X1,Y1) (X2,Y2),当另一个点(x,y)慢慢的靠近这条线时,求这个点到线的距离, 这个会动的点的坐标是实时测量的,会变,要连续的测量点的线的距离,根据距离来做下一步操作,这个程序计算出来是有误差的,因为它只考虑了纬度的变化,没有完整考虑地球的曲率。我测试的情况是,点与线...原创 2020-02-26 14:42:55 · 667 阅读 · 0 评论 -
mcp25625 CAN控制嚣
现在 的主流MCU都内置的CAN了,但是一些特殊的条件下还有可能需要独立CAN控制嚣,mcp25625就是我公司常用的一个独立CAN控制嚣。这个片子有中文PDF,用起来应该不是问题。下面重点说下它的寄存器左边是控制寄存器,中间是发送寄存器,右边是接收寄存器,排列的还是有规律的。由于这个片子是SPI接口的,不能轻意的寻址到任意寄存器,(相对并口接口FMC来说),好在这个片子提供了...原创 2020-02-22 15:44:24 · 2369 阅读 · 9 评论 -
动态修改网页WEB中的变量值
网页中需要根据环境修改的type="text"的值,比如IP地址,我一直不知道怎么修改,看了aric2013的一个例子,他是用sprintf("%d", ip[])来实现的, 我一直在找实现的方法,曾经我想从openwrt里找相关的灵感,因为在路由器中有很多类型的设置的地方,什么网段了,DNS了,但是没有找到相关的文件, eric2013的办法我也考虑过,但是我认为这不够通用...原创 2020-02-22 12:38:21 · 1039 阅读 · 0 评论 -
mdk ac6 CLANG
使用MDK AC6(CLANG)一定要格外小心,下面是我在调试BOOT时出现的问题,浪费了我好长时间。200214 willow addCLANG 在下面的编译中有问题,AC5就没有问题,程序正常。但是使用AC6发现只要一执行__set_MSP(StackAddr);所有的局部变量就会变化,经过单步执行生成的汇编语言,发现__set_MSP会使用R0, 但AC5不用R0, R0中保存的...原创 2020-02-17 09:14:56 · 1232 阅读 · 0 评论 -
OV5640
上次买开发板,顺便买了个OV5640,因为我一直有做数字数传的打算,虽然只是打算,但还是在有所动作,哪怕买回来吃灰……。上框图,任何一个电子器件,只要一上框图,我就能心里有个总体的认识了,PV5640分成么几部分,光传感嚣、时钟、图像处理嚣(ISP)、图像接口、控制接口。由这几部分就可以组成一个完整的摄像头了。OV5640是CMOS类型数字图像传感器。该传感器支持输出最大为500万...原创 2020-02-11 15:22:39 · 5959 阅读 · 0 评论 -
在keil 生成的xxx.bin文件最后添加CRC32校验
@echo offECHO Add CRC32 At the end of the documentECHO -------------------------------------SET SREC_PATH=C:\SRECfor /f %%i in ('dir /b .\gps_bass.bin') do (set indexdx=%%~zi)ECHO %indexdx%...原创 2020-01-17 10:21:29 · 11962 阅读 · 27 评论 -
单片机给大文件做 CRC32 校验
对文件进行CRC校验,有时候文件比较大,单片机RAM比较小,一次不能把文件全部读到缓冲区里,因此需要分批读取,分批做CRC校验,下面就实现了单片机对大文件进行CRC32校验的功能。 tatic unsigned int CRC32_data_file; unsigned int CALCRC32_set( unsigned int crc32){ CRC32_data_fi...原创 2020-01-14 17:10:07 · 1374 阅读 · 0 评论 -
stm32 zip gz zlib研究并移植
今天,zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库,包括:* Linux核心:使用zlib以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心。* libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。zlib库已经有人移植到RTT上了,...原创 2020-01-07 16:02:48 · 5113 阅读 · 3 评论 -
stm32的unique ID全球唯一码
我经常把STM32的全球唯一码作为 网卡的MAC地址,但有一天我发现我发现,我的2个板子 的MAC地址一样,造成只能有一个ping通。我查看这2个板子的单片机的UNIQUE ID,发现非常接近。unique id只有前4个字节不一样,而我用的MAC地址是unique id的后6个字节,这就造成生成的MAC地址一模一样,可能是这2个片子是同一批买的,同一批生产的,ID号...原创 2019-11-22 08:50:10 · 1329 阅读 · 2 评论