
STM32
文章平均质量分 63
lovebeyond1014
这个作者很懒,什么都没留下…
展开
-
STM32F05x移植GD32F1x0注意事项
提要:costdown 前言:本以为能很顺利的移植,结果130这颗芯片虽然是M3的core,实际上外部PIN与GPIO等寄存器结构与M0一致,NVIC部分又与M3一致,简言之,130即有M3的“基因”,也有M0的“基因”,主要这颗芯片是为了与ST的M0芯片抢市场。由于刚上市,所以Library从ST M0的Library基础稍作修改。寄存器名称虽然不一样,但是实际地址与功能是完全原创 2014-06-27 10:38:39 · 5491 阅读 · 0 评论 -
STM32—DMA之外设到外设使用
无论是外设与MEM的哪种组合,DMA的操作本质是地址到地址的操作。STM的RM中没有具体说明外设到外设的SETTING,通过猜想与验证,得到以下结论。DMA传输方式的外设到外设,只需将其中一个外设的寄存器地址当成MEM的地址即可,其他设置与外设到MEM一致即可实现外设之间的DMA传输。注:特殊的在于DMA的MEM2MEM需要使能CCR中MEM2MEM。原创 2013-07-18 17:13:37 · 9169 阅读 · 5 评论 -
16Khz音频定时触发采样DMA存储过程
一、AD Setting1、Calibration (ADCAL)2、设定ADC Chennel与SCANDIR等,在低功耗应用方案,选择PCLK/4,并设置SMP(tCONV = Sampling time + 12.5 x ADC clock cycles)3、AD设置为Single conversion mode (CONT=0)In Single conversio原创 2013-07-16 04:01:56 · 2632 阅读 · 0 评论 -
STM32 REG设置注意延时
1、TIMx->EGR |= 1;EGR的LSB UG置位,将重新初始化ARR,并触发一次更新中断, 所以在扩展TIM为32Bit时,需特别注意,操作完之后需即时Clear;->TIM_ClearITPendingBit(TIMx,TIM_IT_Update);如果需测试该效果,务必在置位后,进行小的延时,才能看到触发效果,此时查看的PendingBit才是置位态;原创 2013-04-02 10:36:06 · 2160 阅读 · 0 评论 -
Keil增量编译build异常
装完MDK4.6/4.7a,发现没有修改源文件的情况下,单击build,每次都是重新编译,之前测试过重新建立工程/装回4.22,解决了该问题,当时并没多想原因。这次又出现了这个问题,重装了很久,也都这样,没有解决。原因:1、前阵子安装CDR时,修改了系统时间,忘记修改回去导致。原因分析:1、Keil编译时,会将.c等源文件修改时间与系统时间比较,如果修改时间比系统时间靠后,那么即使原创 2013-03-21 10:54:31 · 3063 阅读 · 0 评论 -
KeilMDK4.7a下载地址/中文乱码解决/自动关联设置
推荐地址1,速度更快(确定为4.7a版本,且含注册机):1、http://www.mcuzone.com/software/keil/MDK470.RAR 2、http://kuai.xunlei.com/d/uT9EBQLgrQAzVCZR861 (1)之前版本中文删除/复制时出现乱码的解决办法:==》Edit->Configuration->Editor原创 2013-03-20 17:54:49 · 3076 阅读 · 1 评论 -
Jlink不能对STM05x(CM0)进行OptionByte操作
Jlink可以对CM3的芯片进行加/去读保护,比如去除读保护,可以用Unsecured chip或者STM32 Unlock,但是对于CM0芯片无论是加还是去除读保护都是无效的。但是通过STLink的OptionByte操作却可以,但是出现特别奇怪的是,程序在Run的时候,STlinkV2竟然也无法操作CM0,只能先用Jlink对其进行Erase,再用STLink进行去保护操作。在Seeger官网原创 2013-02-04 15:07:21 · 2314 阅读 · 1 评论 -
STM32实现低功耗待机总结(电流低至5.7uA)_20140218更新Debug经验分享
刚开始进入STOPMode后,整机功耗有300uA的,此时外围其他硬件电路电流已经可以肯定漏电流在nA级,因此调试方向在主芯片,经过实际测试,都是GPIO配置的问题,比如某个GPIO为中断输入,闲置为低电平,而我们配置成了IPU,因此内部的40K上拉就会在这里消耗3/40k =75uA,另外将N.C的GPIO配置成Floating Input,也会有一些漏电流,实际测试漏电流不大;另外将STM32原创 2013-01-16 10:05:05 · 23831 阅读 · 1 评论 -
Gsensor/Gyro数据滤波算法思考
1、IIR无限脉冲响应滤波,实时响应动态变化;2、数据读回之后,16bit-adc的值很大,因此高灵敏度导致误差的存在,所以数据需要除上一个大数,将sensor的误差消除,再进行放大,如:sensordata >> =9;sensordata 这样计算的结果跟sensordata >>= 4的结果是不一样的,虽然从公式看,结果一致,但实际上,第一步>>9时,就已经将误差消除干净,如原创 2013-01-15 17:37:21 · 5022 阅读 · 0 评论 -
STM32硬件SPI使用与nSS的理解
最近在调试硬件SPI,之前使用软件模拟方式,为了提高速度,选择该方式进行替换。花了一些时间了解寄存器跟库函数直接调用,结果要么读取不出数据(陷入等待TXE,RXNE死循环)或读取数据为0xffff,0x0101(nSS拉低之后没有跳变,或者Send/Write分开写,没有形成环形FIFO Shift,根据全双工协议,读写应该同时进行)。后来才在网上查找资料,并认真阅读STM32的RM,整理如下原创 2012-12-15 16:10:11 · 19074 阅读 · 2 评论 -
STM32(Cortex-M3)中优先级的概念
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,原创 2012-12-01 20:47:29 · 1823 阅读 · 1 评论 -
STM32之bit band 操作理解
Cortex-M3 支持了位操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。 在 CM3 支持的位带中,有两个区中实现了位带。 其中一个是 SRAM 区的最低 1MB 范围, 0x20000000 ‐ 0x200FFFFF(SRAM 区中的最低 1MB); 第二个则是片内外设区的最低 1MB范围, 0x40000000 ‐ 0x400FFFFF(片上外设区中的最低原创 2012-12-01 20:45:41 · 9687 阅读 · 0 评论 -
STM32 ADC的规则通道和注入通道有什么区别(转)
STM32的每个ADC模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,对多个模拟通道自动地进行逐个地采样转换。有2种划分转换组的方式:规则通道组和注入通道组。通常规则通道组中可以安排最多16个通道,而注入通道组可以安排最多4个通道。在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。转载 2012-12-01 20:32:29 · 11061 阅读 · 0 评论 -
CM0的启动引导区设置(RM0091)
The values on both BOOT0 pin and nBOOT1 bit are latched on the 4th rising edge of SYSCLK after a reset. It is up to the user to set nBOOT1 and BOOT0 to select the required boot mode.The BOOT0 pi原创 2012-11-28 20:00:31 · 2238 阅读 · 1 评论 -
STLinkV2对烧录后的芯片不能通讯解决方法(更新)
1、如果将SWD配置为其他GPIO使用(尤其是CM0,内部复用结构域CM3不一样),那么可以通过之前文章介绍的方法,将Flash内容进行Erase或Reprogram;具体为:将RST强制接GND,连接Jlink,按F4或F7,稍微保持RST,连接成功以后,松开RST即可;2、根据STLinkV2的提示检查SWD+VCC+GND是否连接正常;3、确认所通讯的IC(CM0)没有加LV2的保护原创 2012-11-27 16:05:15 · 5704 阅读 · 0 评论 -
STM32F进入STOPMode方法与唤醒后注意事项
进入的方法很简单,直接调用库函数:PWR_EnterSTOPMode(PWR_Regulator,PWR_STOPEntry_WFI),退出的方法是用外部中断方式唤醒即可。退出STOPMode后,根据手册说明,会自动选择HSI作为sysclock,因此如果系统之前采用的是非HSI作为Sysclock,则必须重新调用System_init(),对RCC部分进行重新初始化。否则会影响系统性能。从手册上原创 2012-11-26 16:36:47 · 21827 阅读 · 0 评论 -
STM32F05x加入RDP(LV1)后,Segger无法Unlock的解决办法
沿用之前CM3核的STM32F10X系列的加入RDP功能,之后在Segger的Unsecured Chip或者Unlock STM32的Cmd无法进行去除RDP,而Unlock STM32则提示无法识别该型号。尝试了很多方法,依然无法对其进行Remove RDP,估计是型号比较新,Segger还未完全支持吧。所用 的Segger为官方最新的Release跟Beta版本V4.65d跟V4.67c/原创 2012-11-24 17:33:05 · 3927 阅读 · 0 评论 -
Jlink更新至V4.65d后,Jlink不能使用的问题解决办法
这几天在使用STM32F050c6d的MCU进行移植开发,只有最新的版本才对这颗MCU支持,所以被迫更新到了最新的版本。MDK4.6跟Jlin4.56d的下载地址在我的资源里已经共享。安装完以后提示更新,更新之后被告知,Jlink为Clone。 解决办法如下:1、重新烧写固件到Jlink,将原来V8.bin固件用Winhex打开,并找到偏移地址为0xff00为首地址4bytes原创 2012-11-22 21:06:24 · 22725 阅读 · 2 评论 -
CM0烧完程序不能再次烧录的解决办法
在移植的过程中,我将CM3的程序移到CM0,修改完后Download,发现无法再次下载,感觉芯片被锁,用Jlink去擦除,返回Read都为0的现象。根据范围的锁定,推测问题出现在GPIO上。 这是因为GPIO的setting将SWD的AF0(Reset default)配制成普通的GPIO口,导致烧写完程序后,SWD功能被除能。解决办法:打开Segger,载入一个没有将SWD配置G原创 2012-11-17 23:42:19 · 2604 阅读 · 0 评论 -
__packed 结构与单个 __packed 字段
对于一个ARM系统来说,32位数据如int的访问必须是4字节对齐的,16位就要2字节对齐(struct 结构中都是int16_t,int32_t可不需要添加__packed,如果有偶数个char型也可以不添加,因为可以按半字对齐,如str中有5个char型,不加则为6,加则为5,但也破坏了边界对齐的形态,会增加读取效率),否则就会有Data-Abort的异常。因此在一个struct当中,并不能保证转载 2012-09-11 15:05:26 · 1535 阅读 · 0 评论 -
变长参数应用
1、Fifo.h: #include "stdarg.h"…… #define FIFOSizeMax 50 #define FIFOFunPointerMax 10 typedef int32_t (*fifoproc)(int32_t argc,...); typedef uint8_t DataType; /*FIFO的数据可以是特定的结构体*/ typedef __p原创 2012-09-11 12:52:16 · 899 阅读 · 0 评论 -
Image解读
|Image$$RO$$Base| 表示RO输出段运行时起始地址,也可以说是程序代码存放的起始地址,由-ro-base这个参数指定;|Image$$RO$$Limit|表示RO输出段运行时存储区域界限,其值可通过|Image$$RO$$Base|+Code sizes+RO Data sizes+4计算得出;量是编译器内部产生的变,也就是只读属性的程序段的最后一个字句的地址,|转载 2012-05-07 15:56:38 · 909 阅读 · 0 评论 -
STM32引入RO,RW存储信息
在Keil启动文件 startup.s中加入以下代码,将信息先导入,在DCD命名空间,将该信息导出到其他文件使用,如BaseOfROM可以在NVIC重定位的函数中可以自动适配。IMPORT|Image$$ER_IROM1$$RO$$Base| ; ROM code startIMPORT |Image$$ER_IROM1$$RO$$Limit|; RAM data starts aft原创 2012-05-07 15:13:02 · 3423 阅读 · 0 评论 -
ARM中的RO、RW和ZI DATA
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。要了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保转载 2012-05-07 14:20:35 · 902 阅读 · 0 评论 -
Cortex-M3启动分析
理论基础: 实际Flash Debug模拟: 以上有关Hex文件的解读,请参阅之前的笔记。原创 2012-03-07 09:37:21 · 988 阅读 · 0 评论 -
关于Cortex-M3系统复位的思考
1、阅读《CM3权威指南》,指出复位时,写入AIRCR的值为(0x5FA__set_FAULTMASK(1);NVIC_SystemReset(); 推荐使用系统复位!2、采用改变PC值的方式,让PC重新指向复位向量所指向的值。即:void Reset(void){ void (*fp)(void); fp = (void (*)(void)原创 2012-03-06 00:04:27 · 6563 阅读 · 5 评论