![](https://img-blog.csdnimg.cn/20210124233430388.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
STM32进阶-疑难问题录
文章平均质量分 72
本栏目主要记录STM32的一些比较隐藏的细节问题,却能在关键地方困扰你
吾爱技术圈
这个作者很懒,什么都没留下…
展开
-
Keil MDK的sct分散加载文件详解
MDK 生成一个以工程名命名的后缀为 *.sct 的分散加载文件 (Linker Control File,scatter loading),链接器根据该文件的配置分配各个节区地址,生成分散加载代码,因此我们通过修改该文件可以定制具体节区的存储位置。工程构建时, MDK 会根据我们选择的芯片型号,获知芯片的内部 FLASH 及内部SRAM 存储器概况。这里我选择的是STM32F103VET6型号, 这款单片机有 64 KB 的 SRAM,512 KB的 ROM 内存,可以通过规格书查到。原创 2022-11-02 18:32:10 · 12035 阅读 · 3 评论 -
STM32 CAN过滤器
目录1 前言2 几个重要的概念2.1 为什么要过滤器?2.2 两种过滤模式(列表模式与掩码模式)2.3 验证码与屏蔽码2.4 列表模式与掩码模式的对比2.5 标准CAN ID与扩展CAN ID3 设置过滤器模式3.1 32位宽的掩码模式3.2 32位宽的列表模式3.3 16位宽的掩码模式3.4 16位宽的列表模式4 过滤器匹配序号5 过滤器优先级规则6 总结1 前言STM32F10X的bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.原创 2021-07-29 16:35:01 · 5052 阅读 · 22 评论 -
STM32 触发HardFault_Handler如何查找原因
STM32出现HardFault_Handler硬件错误的原因主要有两个方面:1、内存溢出或者访问越界。(包括使用野指针)2、堆栈溢出。下面的几个方法不一定能找对地方,所以有时候需要多试几个方法。并且结合变量值分析错误原因。方法一...原创 2021-07-16 14:16:10 · 14371 阅读 · 11 评论 -
MCU提高ADC采样精度的几种方案
1、开启ADC以后,延时一段时间,再采样,如果是连续采样的话,开始的几百个数据建议丢弃。原因就是开启ADC的瞬间,电压肯定是在波动状态的,这个时候采样肯定有问题。2、过采样。如果采样频率高于信号最高频率的两倍,这种采样被称为过采样。(奈奎斯特采样定理-香农采样定理)即尽可能快地采样数据,比如之前是1s采1次,现在做成100ms采1次,并把缓存10次的数据求平均。3、使用基准电压,可以用外部基准电压或者内部基准电压。4、提高电源稳定性,模拟电源VDDA单独供电。5、硬件上在模拟输入端加滤波电路。6原创 2021-06-16 13:58:33 · 6483 阅读 · 0 评论 -
STM32 ADC采样使用内部参考电压
整理也能进步!写得清楚才能理解更深。【问题背景】在使用ADC时,通常的用法是Vref+接电源VDD3.3V,然后计算时直接用3.3V做参考电压,但是这种方法忽略了一些情况如供电电压有可能随外部一些其他用电器工作使用的大电流而导致电压不稳定,还有可能LDO转换的精度个别较大。这时候依然用3.3V的定值做参考电压显然得出的值就会出现与实际电压偏差较大的问题。VDD、VDDA,VBAT,VREF的区别MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何原创 2021-06-04 17:39:47 · 30583 阅读 · 6 评论 -
STM32的GPIO为输出模式时获取其输出状态
抛出一个问题,STM32的GPIO能否在不改变模式的情况下同时做输入和输出呢?答案是可以STM32F103 的参考手册GPIO章节摘录:第5点,在开漏模式时,对输入数据寄存器的读访问可得到I/O状态。从这一点我们可以看出,STM32的GPIO设置为开漏输出模式时,改变输出电平可以生效(但输出1时受外部上拉电阻影响),同时可以通过输入数据寄存器即GPIOx_IDR读取该IO口的状态。这里还要注意第6点,在推挽输出模式下,读取输出数据寄存器即GPIOx_ODR只能读到该IO口最后一次设定的输出电平状态,原创 2021-03-22 20:29:15 · 6860 阅读 · 0 评论 -
STM32 调试脚上电默认电平
问题背景首先简述遇到此问题的情况。在某一个项目上,硬件上设计了MCU可以将电池供电部分的供电开关断开,目的是在出厂时需要充好电池的电并且处于关电状态防止电池放电,而这个控制脚恰好是PB4,实测在仅由电池供电时,将PB4下拉,MCU会在下电处于临界复位电压时,由于PB4是内部默认拉高的,所以又会上电,这就导致无法下电,经测试更换到其他的GPIO就好了。问题探究查询Reference manual发现,PB4确实存在默认内部上拉的情况。实测STM32L476板子的调试口相关GPIO电压的情况:PB原创 2021-03-20 15:28:02 · 3837 阅读 · 2 评论 -
STM32关闭CAN外设的自动重传功能
平台:STM32F103STM32F103可以关闭自动重传功能,如使用标准库,在初始化配置时,使能CAN_NART 即可CAN_InitStructure.CAN_NART = ENABLE;//禁止报文自动重传CAN主控制寄存器 (CAN_MCR)uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)函数中/* Set the no automatic retransmission */ if (CAN原创 2021-03-12 16:34:14 · 4465 阅读 · 2 评论 -
STM32F0芯片IAP实现之中断向量表重映射(没有中断向量表偏移寄存器SCB->VTOR的应对方法)
问题背景项目使用STM32F030,需要通过IAP进行固件升级,在FLASH里面要烧录两份代码:一个Boot loader,一个用户应用程序APP。在开发应用程序APP时,外设中断不能正确响应进到对应的中断函数。解决方案此原因是在Cortex-M3内核的MCU上可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;该寄存器的值来实现中断向量表的重定义。但在STM32F0xx系列以Cortex-M0为内核的单片机中却怎么也找不到这个设置中断向量表的寄存器,用原创 2021-03-05 10:23:27 · 8400 阅读 · 2 评论 -
STM32开启定时器就立即进Update中断问题探索
问题描述:意外发现定时器再刚使能后立即就进了中断,且是Update中断,比较奇怪,难道Update中断不是定时器计数溢出后才触发吗?因此有此文章记录相关情况。测试平台: STM32F103VET6驱动库版本:标准库V3.5.0一、首先上测试代码:void TIM3_Int_Init(u16 arr,u16 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure;原创 2021-01-25 16:00:14 · 2293 阅读 · 0 评论 -
MDK KEIL 烧录STM32下载错误:Flash Timeout.Reset the Target and try it again.解决办法(芯片解锁 解除读报护)
使用keil开发STM32点下载时出现下面的报错:点确定后:出现如上情况很可能是该芯片锁死,即设置了读写保护。解决方法是想办法解锁芯片,可以使用ST-Link配合stlink utility软件,或者使用J-link,或者用一个自动取消读写保护位的程序在SRAM区运行一下(读写保护只影响 FLASH, SRAM调试时程序下载到 SRAM 中,不受影响) 。当然其实上面的方法原理都是一样,下面就使用ST-Link配合stlink utility软件解锁芯片的方法阐述一下。stlink utilit原创 2021-01-14 17:57:10 · 46933 阅读 · 36 评论