STM32系列开发经验
文章平均质量分 81
此专栏专注于STM32全系列产品的实际开发经验分享!
城南花已开..
这个作者很懒,什么都没留下…
展开
-
HardFault_Handler问题查找方法
在开头加上0x 后将从图中6处复制的地址粘贴,得到如图中7处所示的数据。3.由于异常发生时,内核将R0~R3、R12、R14(LR)、PC、XPRS寄存器依次入栈,其中R14(LR)即为发生异常前PC将要执行的下一条指令地址。取Memory1的0x200006B8地址中的第6个地址,即图中6处08000A15。2. 打开Memory窗口,将MSP对应的值0x200006B8输入至Memory窗口的Address出(图中5),进行查找。通过R14(LR)即图中2处的值,可确定在MSP(主堆栈)。转载 2023-06-01 11:03:05 · 1750 阅读 · 1 评论 -
c语言栈溢出的原因及解决办法_STM32编程:是时候深入理解栈了
308a08b954ee9de2d3d74da7d482fc43.png[导读] 从这篇文章开始,将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点,或者踩过的坑。为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法预测乱飞现象。所以对栈的深入理解是非常重要的。版权声明:所有文章版权归嵌入式客栈所有,如商业使用,须嵌入式客栈授权。欢迎关注微信公众号,内容更丰富。啥是栈先来看一段动画:b01edc95ab3f4b1f773e4430d3.转载 2021-05-06 09:19:10 · 2911 阅读 · 0 评论 -
关于RS485的DMA发送,以及EN使能脚的自动切换
ST官方都有APPNOTE指导的(对于UART没有RS485功能的单片机型号而言):1、启动DMA前,先关闭UART发送完成中断,并清除发送完成中断标志;2、在DMA传输完成中断函数中,开启UART发送完成中断;3、在UART发送完成中断函数中,切换RS485为接收态;DMA中断时,只表示需要传送的所有数据字节全部传送到串口的发送数据寄存器中了。此时串口实际上还有2个字节并未发送完成,数据寄存器和移位寄存器中的2个字节还需要发送,并不能关闭串口发送。同理,如果是485切换方向,必须要等到.原创 2021-03-09 21:00:46 · 5232 阅读 · 1 评论 -
STM32 堆栈大小的设置及分析
一、通过map文件了解堆栈分配(STM32、MDK5)--避免堆栈溢出环境:STM32F103C8T6,MDK5在最近的一个项目的开发中,每当调用到一个函数,程序就直接跑飞。debug跟进去看不出什么逻辑错误,但发现函数内局部变量声明之后,全局变量的值被清零,后来查看局部变量地址已经超出栈的范围,于是确定是栈溢出。如果不稍微了解一下堆栈,在开发过程中可能碰到各种奇怪的错误。二、.map和startup.s文件MAP文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何.原创 2020-10-15 22:31:28 · 14075 阅读 · 1 评论 -
关于STM32F4上CCM内存知识扩展
该篇用于记录一些使用方法之外的知识点。关于具体使用方法请看 STM32F4上CCM内存的使用小结(https://blog.csdn.net/qq_27747359/article/details/109085292)一、CCM内存的优点与缺点The main system consists of 32-bit multilayer AHB bus matrix that interconnects:Eight masters: – Cortex® -M4 with FPU ...原创 2020-10-14 22:38:08 · 1724 阅读 · 1 评论 -
STM32F4上CCM内存的使用小结
一、CCM内存介绍相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系统架构)。只能通过 CPU 对其进行访问(dma等外设不能访问)。二、用法(基于MDK)1、自动分配法(不建议使用)设置完后,若重新编译,map文件里就会有这块SRAM的资源分配——由于IRAM1优先使用,而且一般SRAM1够用,就不会给它分配资源。2...原创 2020-10-14 22:08:46 · 4734 阅读 · 0 评论 -
CAN通讯故障分析
一、现象CAN监控器上出现错误帧。二、分析过程1、检查匹配电阻。两端均为120R电阻,全部断电后万用表测量为60R。(60R为最佳匹配电阻)2、测试发现单独接发送端,将接收端断开,问题消失,锁定问题为接收端问题。3、经过核查得知,发送端为500K波特率,接收端为250K波特率,导致问题出现。三、总结1、匹配电阻需两端120R。2、总线上只要有一个节点波特率不一致,将导致总线数据传输异常。此次为监控端、发送端为500K,接收端为250K。四、知识扩充1...原创 2020-08-03 21:47:23 · 8850 阅读 · 0 评论 -
STM32实时操作系统的FreeRTOS 和uCOS II的比较
freeRTOS比uCOS II优胜的地方:1。内核ROM和耗费RAM都比uCOS 小,特别是RAM。 这在单片机里面是稀缺资源,uCOS至少要5K以上, 而freeOS用2~3K也可以跑的很好。2。freeRTOS 可以用协程(Co-routine),减少RAM消耗(共用STACK)。uCOS只能用任务(TASK,每个任务有一个独立的STACK)。3。freeRTOS 可以有优先度一样的任务,这些任务是按时间片来轮流处理,uCOSII 每个任务都只有一个独一无二的优先级。因此,理论上讲,freeRT转载 2020-07-30 08:39:50 · 2201 阅读 · 0 评论 -
STM32 ~ BootLoad 总结与分析
boot地址为:0x8000000 ~ 0x800c000主程序地址为:0x800c000之后主函数之前添加一下中断向量偏移,以及程序起始地址。注意:相关外设时钟,比如定时器时钟、UART时钟等。必须在中断向量偏移程序之前初始化,否则相关外设会开启失败。(RCC_Configuration();) RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); IWDG_Init(5,1562); /.原创 2020-06-03 21:22:00 · 1387 阅读 · 0 评论 -
在emwin中,调用GUI_Delay()函数,程序卡死,黑屏
没有OS_TimeMS+1可以在systick里或者定时器里定时+1原创 2020-06-03 20:59:23 · 2092 阅读 · 1 评论 -
单片机欠压保护、欠压复位的用法及作用
一. 前言使用编程环境 :KEIL mdk4单片机 : NRF24LE1 二. 分析查询各开发芯片的数据手册,一般在电源管理或者复位设置章节中。以下NRF24LE1为例:Power supply supervisor(电源监控):电源主管在开机时对系统进行初始化,对即将发生的情况提供预警当电源电压过低而不能安全运行时,系统处于复位状态。电源管理框图如下: ...原创 2018-12-28 11:06:40 · 7399 阅读 · 0 评论 -
STM32 DMA传输出错的防错机制
一、DMA 中断对于每个 DMA 数据流,可在发生以下事件时产生中断:● 达到半传输(每次传输都会触发,属于正常触发)● 传输完成● 传输错误● FIFO 错误(上溢、下溢或 FIFO 级别错误)● 直接模式错误可以使用单独的中断使能位以实现灵活性,如 表 43 所示。上诉为F4系列,F1系列中断只有三个,所以只需处理三个即可。见下图:二、常规操作我们正...原创 2019-06-26 20:45:59 · 10941 阅读 · 0 评论 -
keil中保存芯片内部ROM里数据(memory windows中的数据)
我们在使用keil时经常会使用memory windows来观察内存中的数据,但是有时候,比如ADC采样后,我们感觉数据比较有用需要导出来做进一步分析或者远程升级文件出错,那该如何做呢?首先调出调试命令窗口。软件仿真状态下View---->commandwindowskeil的调试命令中提供了一个SAVE命令,可以帮助我们解决这个问题。就是这个窗口了。我们按以下格式输入...原创 2019-06-13 15:37:23 · 2806 阅读 · 0 评论 -
如何判断CAN总线空闲以及帧间隙,计算传输速率
一、如何判断总线忙还是空闲呢进入 正常模式之前,bxCAN 必须始终在 CAN 总线上实现 同步。为了进行同步,bxCAN 将等待 CAN 总线空闲(即,已监测到CANRX 上的 11 个隐性位)。判断总线状态可以监测总线电压,简单来说CAN_H和CAN_L之间的差分电压大的(一般在2V左右)就是显性状态,差分电压小的(理论上是0V)就是隐性,当然容错CAN要复杂很多,就不是这样的。当你一...原创 2019-06-05 10:27:20 · 6674 阅读 · 4 评论 -
STM32 CAN通讯过滤器使用总结及代码分析
一、简介在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送器将消息广播给所有接收器。在接收到消息时,接收器节点会根据标识符的值来确定软件是否需要该消息。如果需要,该消息将复制到 SRAM 中。如果不需要,则必须在无软件干预的情况下丢弃该消息。二、详细各概念2.1筛选器组bxCAN 控制器为应用程序提供了 28 个可配置且可调整的筛选器组 (CAN1和CA...原创 2019-05-01 12:16:49 · 2565 阅读 · 0 评论 -
STM32 CAN通讯的基本知识及硬件设计
一、简介● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议● 比特率高达 1 Mb/s● 支持时间触发通信方案发送● 三个发送邮箱● 可配置的发送优先级● SOF 发送时间戳接收● 两个具有三级深度的接收 FIFO● 可调整的筛选器组: — CAN1 和 CAN2 之间共享 28 个筛选器组● 标识符列表...原创 2019-04-29 19:13:14 · 10560 阅读 · 0 评论 -
STM32 下载调试口(JTAG+SWD)禁用及作为普通IO口
1、RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO时钟2、GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);// 改变指定管脚的映射 注:GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能 ...原创 2019-01-14 21:04:07 · 12313 阅读 · 0 评论 -
STM32 单ADC,多通道,DMA传输的多路数据采集
一、简介ADC相关配置分为:时钟使能,GPIO配置,ADC功能配置,DMA功能配置以及定时触发的相关配置。最终实现功能为:单个ADC,10个通道分别采集十路电压,DMA搬运,定时器触发,定时器中断中读取采集的数值。 二、程序 main(void) { RCC_Configuration(); //时钟初始化 GPIO_Config(); //GPIO...原创 2019-01-14 20:47:45 · 4321 阅读 · 3 评论 -
STM32关于PVD低电压能检测的知识
在实际工程运用中需要对突发情况作出及时的相应,通常都需要考虑当系统电压下降或断电时,需要对控制系统加以保护。这时候就需要在程序中加入系统电压监测(PVD)。供电电压降低到某一个电压值时,需要系统进入保护状态,执行紧急关闭任务(对系统数据进行保存,并对外设进行相应的保护操作)。传统单片机例如STC12C60S2,其自带A/D,可以利用A/D对工作电压进行检测,每隔一段时间进行比较,如果异常进入保护模...转载 2018-12-28 14:34:16 · 5218 阅读 · 0 评论 -
关于RS485通讯中使用STM32串口以DMA方式发送数据丢失字节的问题
1、开发平台计算机操作系统:WIN7 64位;开发环境:Keil MDK 5.14;MCU:STM32F407ZET6;STM32F4xx固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0;串口调试助手;2、问题描述 在测试用STM32F4xx芯片的串口USART1以DMA方式进行RS485收发通讯时,出现数据字节丢失的现象,一般丢失1~...原创 2018-11-29 14:18:01 · 4019 阅读 · 0 评论