mcu
wandersky0822
这个作者很懒,什么都没留下…
展开
-
shine lame mp3
mp3 encoder原创 2023-01-13 08:41:52 · 227 阅读 · 0 评论 -
TRACCAR支持的设备列表
GT06原创 2022-12-17 10:26:06 · 2117 阅读 · 0 评论 -
单片机与嵌入式linux 比较
MCU门槛低,入门容易, 但是灵活,其实对工程师的软硬件功底要求更高, 随着半导体的飞速发展,MCU能实现很多匪夷所思匪夷所思的功能,比如,使用GPIO模拟1个串口,使用DMA配合任意GPIO来实现PWM输出,使用PWM来模拟声音输出, 这些都需要非凡的技巧与天马行空的想象力才能实现的。MCU发展较为分散,就从RTOS来讲,我随口就能讲也5个RTOS,尤其是最近几年,新RTOS一个接一个出,用我的话来说就是阿猫阿狗都出来做RTOS了;虽然这些RTOS都大同小异,但是它毕竟分散了所有开发者的力量,没有积累出一原创 2022-05-30 10:34:19 · 1716 阅读 · 0 评论 -
stm32使用PWM播放音频
stm32使用PWM播放音频|pwm|stm32|dac|pcm (qq.com)stm32使用PWM播放音频,其实大部分MCU都可以下面是一段音频数据的波形局部放大图:具体原理如下以一定的速度采样(ADC)这些波形进行存储,就是音频数据了,所以播放就是按原来采样的速率再用DAC输出对应的数据即可。这里的音频有两个主要的参数,采样速率和采样位数。采样速率:指1s中采样多少个数据点,比如1s种采集16000个点,那么采样率就是16KHz。采样速率越高,越能抓到频率较高的声音转载 2022-05-16 13:19:39 · 6891 阅读 · 2 评论 -
双口RAM浅谈
双口RAM,基本上是10年前的东西了,当前设计的项目应该很少会用到这类器件了,不光是双口RAM,其它随着MCU性能的不断增加,很多器件都会被替代到,不再需要了,比如CPLD,之前公司的板子上有很多CPLD,但现在几乎都不见了。IDT70V271.双口RAM有2套地址、数据总线,2个智能设备可以分时访问双口RAM,共享RAM空间2. 2个MCU不能同时写或都一个读一个写同1个存储单元,不然会有冲突,看文档,可以同时读一个存储单元。3.为了2个MCU之间访问存储空间时不产生冲突,可以使用2种原创 2022-04-20 14:32:39 · 6928 阅读 · 0 评论 -
MDK 字节对齐 __packed 与 #pragma packed区别
这2种字节对齐我都在用,感觉没什么区别,这次又碰到了,通过查看MDK帮助文档,终于弄清楚了,这2个只有细微的差别。Comparison of a __packed struct and a #pragma packed struct第1种实现方法 __packed struct foobar{ char x; short y[10];};short get_y0(struct foobar *s){ // Unaligned-capable lo原创 2022-02-17 11:44:36 · 1840 阅读 · 2 评论 -
中文语音库学习
汉字语音库原创 2022-02-15 15:55:19 · 2842 阅读 · 0 评论 -
verilog 从零开始。。。
从来没有接触过CPLD,FPGA之类的器件,因为这次项目上用,所以才有机会学习verilog,可以说是从0开始的,现在我感觉我的水平也就是刚入门,能看懂别人写的代码了,并能在它的基础上修改修改引脚配置了,呵呵,我学verilog的优势是,我的上学是的数字电路学的不错,对时序是怎么个回事,有深刻的理解。不过基本知识现在忘的差不多了,但是我有些东西是我这辈子都忘不了的。因为我曾经理解了。。。看了一堆教程,周立功的视频教程,特权的视频教程,还有大名鼎鼎的夏宇闻的verilog数字系统设计,但是,针对我这.原创 2018-03-01 21:01:52 · 1518 阅读 · 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 评论 -
ra8873 ST7789区别
看了一上午,终于明白了这2个芯片的本质区别,RA8873怀LCD的接口是标准的RGB接口,所以这个芯片一般都是在LCD外边的,而ST7789是直接可以驱动LCD的原始接口,行列扫描,所以一般颗芯片是集成在LCD内部,或是接口柔性线路板上, ST7789更像一个带显存RAM的LCD控制器,ST7789可以对外接口RGB接口,这是它们本质的区别。这2个芯片都有8/16并口,SPI串口,使用灵活上RA8873更灵活一些,而ST7789的并口与串口,感觉就是直接通向内部缓存RAM的接口 。基本没有什么2D加速功原创 2022-01-10 11:25:27 · 3720 阅读 · 0 评论 -
STM32F437 CAN错误(一个不发送CAN数据的节点,是会影响CAN总线的)
终于解决综合插件CAN导致 刷揭示错误的问题,过程记录一下,有的时候,很多错误是可以避免的,但是一旦出现 , 解决、排查错误的过程会区级费很长时间。我们的产品有3、4个CAN节点,我负责的这个节点只接收,不发送,因此当CAN问题出现时,我第一感觉认为肯定不是我的问题。(一个不发送CAN数据的节点,怎么会影响CAN总线?)刚开始,我就排除,把每一个节点都断开一遍, 最终发现把我负责的那个节点断开后,CAN正常了,这基本说明是我的板子引起的CAN故障,但是我没有发送数据呀?难道是我不经意间发数据了.原创 2021-12-16 19:23:21 · 3392 阅读 · 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 · 3516 阅读 · 0 评论 -
LPC2294 ADS IAP 悲催。。。
2021年11月, 了,居然还在调试ADS,真是悲催,混的太差了没办法硬着头皮还得上。这产品是公司10年前的产品,用的LPC2294 ucosII,这个配置,在10年前应该还是很哇塞的。但是10年过去了,尤其是电子行业,软硬件已经得到了翻天覆地的变化,LPC2294新产品开发应该都不会再会这颗芯片了,再说了在NXP官方网站上,明年就正式停产了。UCOSII好像用的也不多了,当前可是很高大上的东西,而再走RTOS遍地都是,阿猫阿狗都出RTOS了,而且很多著名的RTOS都开源了,随便用,比如RTTHRE原创 2021-11-25 17:42:33 · 551 阅读 · 0 评论 -
MCU加密 思路
读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法1,避免程序中直接出现0x1FFFF7E8 唯一码地址,可以用一个计算得到,比如0x1FFF0000+0x0000F7E8,或者更复杂的乘法,2. 检测到非法的设备上运行时,不要马上死机,要延迟一段时间再爆发,这样更恐怖。3. 如果能远程控制就更好了,远程控制4....原创 2021-10-27 10:27:55 · 551 阅读 · 0 评论 -
STM32 GPIO模拟串口
STM32 定时器 太复杂了原创 2021-10-21 15:00:27 · 3052 阅读 · 0 评论 -
MDK arm 动态加载 系统应用分离 symdefs
这个东西可以应用在很多场合,1.我有一个函数,不想给客户提供源码,连库也不想提供,就可以只提供一个bin文件,再提供一个symdefs格式的文件。2. 为了升级维护方便,我想把RTOS APP彻底分离,以取代现在的RTOS编译成一个lib的形式提供给APP使用, 但是要升级程序时,需要把整个固件升级,如果 是RTOS 、APP分离的话,只需要升级 APP就可以了。上面就是现实意义。...原创 2021-09-18 09:31:48 · 767 阅读 · 0 评论 -
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 · 1427 阅读 · 1 评论 -
rtthrread内存分配 我的理解
rtthrread内存分配(小内存管理算法主要针对系统资源比较少,一般用于小于 2MB 内存空间的系统)小内存分配最容易理解,在HEAP中分配内存时,开关的12Bytes不能使用是控制区, 有魔术字、块大小等属性,然后才是可能的内存区,也就是alloc()返回的指针。slab分配方法,看了很长时间,没有看明白,感觉是与小内存分配截然不同的分配方法,感觉就是先初始化page, 再从page中分配 zone,最后才是从zone中分配内存,可以分配的内存有72种,从8B到16KB,如果分配的内存大原创 2021-09-08 11:25:42 · 443 阅读 · 0 评论 -
rtthread中不同编译器对应的库libc
支持的编译器RT-Thread 支持的编译器有 newlib/minilibc/dlib/armlibc 的支持。在开启了 RT_USING_LIBC 后,GCC 编译使用 newlib未开启 RT_USING_LIBC 时,GCC 编译使用 minilibcdlib 是 RT-Thread 针对 IAR 编译器的移植适配(使用标准库接口时注意开启 RT_USING_LIBC)armlibc 是 RT-Thread 针对 MDK 编译器的移植适配我的经验及理解,使用RTT时就不要用M...原创 2021-09-06 11:23:47 · 2831 阅读 · 3 评论 -
update upgrade 区别
好像rtthread与linux下的 update upgrade的意义不一样,刚好相反?这是RTTHREAD下的官方描述这是linux下的描述:原创 2021-09-03 11:31:07 · 156 阅读 · 0 评论 -
rtthread启动过程,理解
磨刀不误砍柴功,总结一下:th原创 2021-08-31 16:45:43 · 665 阅读 · 0 评论 -
1 wire 传感器总线 MAX31826
内部存储空间组成,2个暂时暂存器,一个EEPROM暂存器1保存转换后的温度值, 暂存器2保存即将写入EEPROM的数据。时序第1步初始化, 其实就是复位。第2步,ROM命令,规定也是必须的,(包括search read write skip)第3步才是真正的命令。发送温度转换命令44H,读温度暂存器值命令BEH。我的操作是提前把数据温度转换好,然后再去读温度数据,读完温度值后直接再发温度转换命令44H...原创 2021-08-26 14:20:22 · 532 阅读 · 2 评论 -
在keil 生成的xxx.bin文件最后添加MD5哈希值
k如果只想使用简单的CRC32就可以满足要求,可以参考这篇:在keil 生成的xxx.bin文件最后添加CRC32校验https://blog.csdn.net/wandersky0822/article/details/104015110其实很简单,把crc_add_bat中crc32参数修改为 md5参数,如下:%SREC_PATH%\srec_cat.exe raw.bin -Binary -crop 0 %indexdx% -Message_Digest_5 %indexdx% -...原创 2021-08-25 11:26:22 · 2593 阅读 · 0 评论 -
分析 调度器 机制
#define_SS static char lc=0; switch(lc){ case 0: lc=0;#define_EE }; lc=0;#defineWaitX(a,b)settimer(&lc,__LINE__,a,b); return ; case __LINE__:struct TASK {char td;void (*fp)();};原创 2021-08-25 09:10:43 · 170 阅读 · 0 评论 -
单总线通信 多机
LIN (12V电平,与串口类似,stm32中可以用串口实现LIN)STM32单片机串口有一个模式( single wire)one wire (这个不能说是吧,这是一个主芯片到从外设slave的通讯方式,比如温度传感器)STM32单线串口应该在特定场合还是很有用...原创 2021-08-10 10:27:18 · 662 阅读 · 0 评论 -
WIN7 通过4G模块 拨号上网过程
WIN7拨号上网过程测试的4G模块:LONGSUNG U9300C SIM7100C Huawei mu909将4G模块接入电脑的USB接口,首先保证模块供电大于2A,不能保证要接外接电源,如果供电达不到要求,USB接口会不识别,比如SIM7100C就要求启动电流较大,直接由电脑的USB接口提供电源会起不来。(可能其它各类的模块因供电不足引起的故障现象不一样)其次要保证SIM可用,不欠费...原创 2021-07-24 09:30:03 · 4281 阅读 · 0 评论 -
LPC1766 PHY DP83848 KSZ8041
空间lpc1768开发板,周立功能例程中自带的PHY驱动是ksz8041,我买的路虎开发板是DP83848,我所做的工作是把周立功能完善的例程移植到我的便宜的路虎开发板上。总共有几个地方需要更改:/ // probe phy address//for(i=0;i<32;i++)//{// PHYID = Read_PHY(i , 2 );// if(PHYID == ...原创 2018-03-01 20:55:00 · 2178 阅读 · 0 评论 -
吹气压力传感器US6310 US6330调试
更换压力传感器, 从US6310 更换为US6330。6310有一个准备好引脚,AD转换完成后会给MCU一个脉冲而6330就没有这个功能,6330这个引脚是用来选择SPI还是I2C接口的。(6330没有复位引脚,内部有POR功能)因此在实现上是有根本区别的,其它方面使用的命令也不一样,6310 A8 A9两条命令,一个命令模块醒来,一个命令模块休眠,6330只有一条命令AA, 命令模块开始转换。针对这2个模块作为2种处理方法,1. 6310,可以设置一...原创 2021-07-19 09:32:13 · 1367 阅读 · 3 评论 -
FFS学习 (FTL)
其实这个FTL我去年就弄完了,而且已经在项目上使用了,但是这几天一天,又忘了差不多了,因此,我决定把这个东西详细认真的再好好看看,趁着还有残留的记忆,巩固一下知识。 这个软件真的很好,软件为为3层,FS, FTL, LLD,非常清晰,这也是当初能够顺利移植成功的原因。先上图吧,这个图简单明了了展现出了此软件的结构,上层为文件系统,有spasion公司自己的FS,因为软件良...原创 2019-07-29 21:15:00 · 2014 阅读 · 0 评论 -
一个很巧妙的RS485通信
RS485通信,熟的很,一般来说这种半双工总线上挂载的设备,只有一个是主,其它都是从设备,而且设备上电前,所有设备的地址已经固定写死了,这样上电后,主设备就会原创 2021-06-01 16:17:30 · 2452 阅读 · 0 评论 -
十几年工作经验总结的单片机编程思想
1.死循环2.状态机3软件分层(裸机程序非阻塞!)我的总结是认真的,不是搞笑的!!!原创 2021-06-01 15:26:17 · 679 阅读 · 0 评论 -
KSZ8795 丢包问题解决过程
KSZ8795 默认是开启EEE(Energy Efficient Ethernet )功能的,实际应用当中,就是因为这个节能设置,会导致在大数据量传输时丢包,比如ping -l 65535 192.168.XXX.XXX 就会出现丢包情况。经过咨询厂家,说是EEE要禁止,就可以解决。经过上面对寄存器的设置,就可以所EEE禁用了, 然后问题得到完美解决。...原创 2021-05-24 17:09:56 · 1438 阅读 · 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 · 2034 阅读 · 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 · 2117 阅读 · 0 评论 -
jlink烧写spi flash (对存储器有要求,一定页对齐)
为了能方便的把大量数据烧写到外部spiflash中,我走了很多弯路,下面说说过程,jlink只是一个硬件,要想通过jlink烧写外部存储器,你还需要软件、下载算法等。1,一开始我在网上看到了,有人搞定了自定义MDK下的XXXXXX.FLM算法文件,可以实现MDK通过JLINK直接烧写stm32外挂的SPIFLASH,我没有仔细研究需求,以为就是这了,于是费了很大的劲、花了1天半的时间,搞定了, 但是突然发现不是我要东西,我的目的很明确,通过JFLASH直接烧写MCU的外挂FLASH,但是这个方法只.原创 2021-04-07 11:49:52 · 2898 阅读 · 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 · 5705 阅读 · 1 评论 -
rtk 精确定位 简介
RTK又称载波相位差分:基准站通过数据链及时将其载波观测量及站坐标信息一同传送给用户站。用户站接收GPS卫星的载波相位与来自基准站的载波相位,并组成相位差分观测值进行及时处理,能及时给出厘米级的定位结果。图1.3差分定位组成RTK系统主要由三部分组成,分别是基准站(差分源),差分数据通信链(网络,电台,3G/4G等),移动站(终端)定位状态RTK根据卫星接收情况,差分...原创 2019-03-14 18:18:59 · 19003 阅读 · 2 评论 -
XBEE XCTU 简易说明
我们公司用的是XBP9X-DM 功能指令集XBEE PRO SXDIGI公司的这个模块种类非常多,zigbee xbee digimesh 2.4G sub1G 我们公司只用了2种一种是低功耗的,一种是高功率1W的,应用场合不一样,使用不同的模块,这些模块都可以通过串口通信,一看是串口,看起来很容易,其实还是有用起来还是很繁琐的。基本所有的操作都可以通过 这个软件来实现,操作、模拟。验证完之后再移植到MCU上。这个软件熟悉起来没有难度,唯一的难点 就是版本问题,...原创 2021-02-22 12:03:28 · 2092 阅读 · 1 评论 -
mcp25625 CAN控制嚣
现在 的主流MCU都内置的CAN了,但是一些特殊的条件下还有可能需要独立CAN控制嚣,mcp25625就是我公司常用的一个独立CAN控制嚣。这个片子有中文PDF,用起来应该不是问题。下面重点说下它的寄存器左边是控制寄存器,中间是发送寄存器,右边是接收寄存器,排列的还是有规律的。由于这个片子是SPI接口的,不能轻意的寻址到任意寄存器,(相对并口接口FMC来说),好在这个片子提供了...原创 2020-02-22 15:44:24 · 2365 阅读 · 9 评论 -
AC6(CLANG)下变量 绝对定位的方法
从AC5转到AC6,很多关键字都不一样, 比如 这个绝对定位的方法,原创 2021-02-20 16:07:03 · 1086 阅读 · 0 评论