![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
文章平均质量分 53
StrongerSun
虽千里,吾往矣。
展开
-
关于嵌入式变量存储位置的思考
嵌入式变量存储位置的思考原创 2024-07-01 01:27:44 · 206 阅读 · 0 评论 -
MemManage_Handler 问题的解决思路
MemManage_Handler 异常问题解决原创 2024-06-26 11:21:57 · 434 阅读 · 0 评论 -
【tool 3】单片机状态过滤库
单片机状态过滤库,用于io口状态过滤或者内部信号过滤原创 2024-05-21 00:01:46 · 326 阅读 · 0 评论 -
stm32 AW9523B IO扩展芯片扩展io口驱动程序
stm32 AW9523B IO扩展芯片扩展io口驱动程序原创 2024-01-10 14:11:32 · 1066 阅读 · 0 评论 -
【tool 2】stm32通过基础定时器进行代码运行时间检测,ns级精度
stm32通过基础定时器进行代码运行时间检测,ns级精度原创 2024-01-03 18:38:23 · 949 阅读 · 0 评论 -
STM32H743 各个外设功能整理
stm32H743 各个外设的功能概要整理,方便之后使用时进行查阅原创 2023-12-31 14:44:00 · 552 阅读 · 0 评论 -
cortex-M7指令集爆炸图
在查bug时仿真汇编指令发现其中有VPUSH和VPOP指令,在官网上找了这张图来加强理解,可见以V开头的指令都是浮点运算指令,VPUSH和VPOP指令用于将浮点数写入或读出FPU专属的堆栈中原创 2023-12-28 19:34:24 · 493 阅读 · 0 评论 -
【tool 1】1、stm32通过滴答定时器进行代码运行时间检测,ns级精度
在arm平台对程序的运行时间进行ns级别的统计原创 2023-12-17 17:59:15 · 1010 阅读 · 0 评论 -
用之前使用正常的keil工程调试程序时,一直卡在 0x00000000 的解决方案
如图所示,一个用了挺久的工程,之前调试都正常,最近调试发现代码进入调试后不直接进入main函数,堆栈一直卡在0x00000000,汇编窗口显示在某个不确定的位置运行,但是不用调试时程序执行正常。这种情况下很可能是keil的工程出现了问题,新建一个工程,然后把所有代码copy到新工程就可以解决问题了。...原创 2021-08-16 10:43:40 · 2185 阅读 · 0 评论 -
ISP、IAP、ICP三种烧录方式的区别
我们常见的MCU / CPU 代码烧录方式主要有以下三种:一、ICP(In Circuit Programing):在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);二、ISP(In System Programing):在系统编程,可借助MCU厂商预置的Bootloader 实现通过板载UART原创 2021-08-15 09:42:18 · 3408 阅读 · 1 评论 -
stm32070 ota 步骤
一、整体思路项目使用STM32F070,需要通过IAP进行固件升级,将flash分为4块,最小一块为boot,第二块为app区,第三块为backups区,此区域大小与app区大小一致,第四块为data区,存放一些固定数据。二、添加链接文件; ************************************************************* ; *** Scatter-Loading Description File generated by uVision..原创 2021-08-13 16:02:20 · 997 阅读 · 0 评论 -
stm32 堆栈存放分析
一、理论数据存放数据在SRAM中的存放情况,最下层为静态数据区,再上层是堆区,最上层是栈区,二、栈存放:(1)栈底地址:在map文件中搜索STACK,可以看到该工程的栈底地址为0x200002a0(2)栈顶地址:在map文件中搜索__initial_sp,可以看到该工程的栈顶地址为0x200003a0(3)栈占用大小:根据上面的地址信息,则可以推算该工程的栈大小为 0x200003a0 - 0x200002a0 = 0x0100在启动文件中查到栈分配大原创 2021-06-29 21:54:23 · 1214 阅读 · 0 评论 -
Cotex-M MSP和PSP 指针
MSP和PSP 的含义是Main_Stack_Pointer 和Process_Stack_Pointer,在逻辑地址上他们都是R13;以下摘录子,cotex-M3权威指南Cortex-M3内核有两个堆栈指针:MSP-主堆栈指针和PSP-进程堆栈指针,在任何一个时刻只能有一个堆栈指针起作用,也就是说任何一个时刻只能使用一个堆栈指针,要么使用MSP,要么使用PSP。何为堆栈指针,其实就是普通的指针,只是他们指向两个不同的堆栈。MSP:主堆栈指针,当程序复位后(开始运行后),一直原创 2021-06-23 21:51:09 · 4410 阅读 · 0 评论 -
stm32 printf 进入 HardFault_Handler
由于程序中使用了freertos,所以最终查出来是每次任务切换时都会导致进入HardFault_Handler,有可能是printf的不可重入性导致的问题。最终在printf前后进行开关中断即可解决问题。原创 2021-04-20 16:57:08 · 1333 阅读 · 3 评论 -
对STM32的三种启动模式的理解
目录概括第一种,主闪存存储器启动第二种,系统存储器启动第三种,内置SRAM启动概括在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004...原创 2021-01-26 00:02:51 · 1485 阅读 · 0 评论 -
对stm32 flash 模拟eeprom的一些理解
目录一、简介二、使用外部eeprom和仿真eeprom之前的差异三、实现eeprom仿真的原理四、代码及原文文档下载地址本文参考st官方文档AN4061 STM32F0xx 微控制器中的EEPROM 仿真AN2594 EEPROM emulation in STM32F10x microcontrollers一、简介在工业应用中经常使用 EEPROM(电可擦除可编程只读存储器)来存储可更新的数据。EEPROM 是用在复杂系统(例如计算机)和其它电子器件中的一种..原创 2021-01-14 19:17:41 · 2200 阅读 · 0 评论 -
stm32 启动文件解析及注意点
一、启动文件的作用1.初始化堆栈指针SP;2.初始化程序计数器指针PC;3.设置堆、栈的大小;4.设置异常向量表的入口地址;5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);6.设置C库的分支入口__main(最终用来调用main函数);7.在3.5版的启动文件还调用了在system_stm32f10x.c文件中的SystemInit()函数配置系统时钟,在旧版本的工程中要用户进入main函数自己调用SystemInit()函数。原创 2020-12-11 22:40:40 · 1726 阅读 · 1 评论 -
adc读出的数据和输入电压不匹配
1、参考电压输入有误(1)stm8和stm32 模拟电源输入的电压有问题,或者精度设置出错,导致最终电压参考有误,最终adc值出错。(2)华大的芯片还多了一种可能,就是adc的参考源选择错误,可选的参考源包括内部1.5v参考,2.5v参考,外部信号输入参考,电源参考。2、引脚虚焊导致阻抗变大在引脚虚焊时会导致最终adc的输入阻抗过大,导致最终adc采样出错3、外部输入阻抗过大在外部信号分压的电阻过大时,导致adc的识别出错,实测是adc读出来的值比实际值要小一些。详见此链接4原创 2020-11-08 18:05:41 · 4574 阅读 · 0 评论 -
STM32高级定时器定时变慢
在做一个项目时,为了节约时间将通用定时器的 定时代码直接改动用来驱动高级定时器,发现时钟比预想的慢了六七倍,百思不得其解。经过各种方式查找后发现是配置高级定时器时一个参数没有配置,造成有定时变慢 改动之前static void TIM1_Mode_Config(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /* Time base configuration,输出pwm频率为1KHZ */ TIM_TimeB..原创 2020-11-07 17:14:25 · 2050 阅读 · 0 评论 -
高手带你分析STM32 的启动过程
当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都...转载 2020-09-25 08:59:07 · 1074 阅读 · 1 评论 -
stm32f0 将内部时钟提高到48M
在官方的例程中,系统时钟配置方式为如果有外部时钟,则把主时钟倍频到48M,如果没有外部时钟,则设置默认内部时钟为8M代码如下/** * @brief Configures the System clock frequency, AHB/APBx prescalers and Flash * settings. * @note This function should be called only once the RCC clock configuration原创 2020-08-18 13:31:32 · 1271 阅读 · 4 评论 -
stm32 获取时钟频率
1、定义变量2、将变量添加到watch窗口, 查看各个结构体成员的值,本例中系统时钟为8m原创 2020-08-18 11:15:29 · 2447 阅读 · 0 评论 -
stm32高级定时器pwm调试时输出,复位后不输出
经过查找后,问题的源头在于定时器配置的顺序有问题,换了配置的顺序就好了。之前先配置了定时器模式,再配置中断复位后不输出。之后先配置了中断,再配置定时器模式,工作正常。/****************************************************************************** * @file stat...原创 2020-04-17 10:19:57 · 1830 阅读 · 5 评论 -
STM32外设使用(九) Flash
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习目录目录一、简介二、在stm32中的结构三、代码示例四、碰到过的问题一、简介在STM32芯片内部有一个FLASH存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部FLASH中,由于FLASH存储器的内容在掉电后不会丢失,芯片重新上...原创 2020-03-22 10:59:28 · 2310 阅读 · 0 评论 -
使用STM32 IIC中的一些问题
使用环境:我这里是操作mpu6050,如果是操作eeprom是没有问题的,基本随便怎么干都没问题,操作mpu6050有问题的朋友可以过来看看,这里在硬件iic上前前后后花费了很多的时间和功夫,中间也遇到各种问题也解决了各种问题,我硬件iic都已经用到了dma去操作了,dma操作,或者是硬件iic操作有点好处就是外设自己的发数过程中,不占cpu的,这时候别的中断进来了,可以去跑cpu运...原创 2019-12-28 00:02:43 · 685 阅读 · 0 评论 -
STM32外设使用(八) FSMC
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习目录一、简介二、在stm32中的结构三、驱动液晶屏代码示例四、碰到过的问题一、简介FSMC(Flexible Static Memory Controller,静态存储控制器):灵活的静态存储器控制器。可用于Stm32芯片控制 NOR FLASH、PSRAM和NAND FLASH存储芯片...原创 2019-12-12 00:01:04 · 1619 阅读 · 0 评论 -
STM32外设使用(七) 高级定时器
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习该文章正在完善中。。。。目录一、高级定时器简介二、高级定时器功能框图三、高级定时器功能描述四、高级定时器程序配置五、碰到过的问题一、高级定时器简介STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入...原创 2019-12-08 23:49:36 · 926 阅读 · 0 评论 -
STM32外设使用(六) 通用定时器
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习该文章正在完善中。。。目录一、通用定时器简介二、通用定时器功能框图三、通用定时器功能描述四、通用定时器程序配置五、碰到过的问题一、通用定时器简介STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能...原创 2019-12-08 23:43:24 · 615 阅读 · 0 评论 -
STM32外设使用(五) 基本定时器
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习本文章基于STM32F103芯片目录一、基本定时器简介二、基本定时器功能框图三、基本定时器时间计算四、基本定时器配置五、碰到过的问题一、基本定时器简介STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能...原创 2019-12-08 23:10:05 · 1037 阅读 · 0 评论 -
STM32外设使用(四) ADC
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习目录一、ADC简介二、ADC功能框图三、ADC功能描述1、电压输入范围2、输入通道3、转换顺序4、触发源5、时钟输入6、数据寄存器7、中断四、ADC程序配置五、碰到过的问题1、使用adc buf中的数据进行计算时出错一、ADC简介ADC是A...原创 2019-12-08 01:09:34 · 2752 阅读 · 1 评论 -
stm32外设使用(三)Uart和Usart
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习目录一、UART和USART简介二、UART通信协议1)起始位2)数据位3)奇偶校验位4)停止位5)空闲位或起始位6)波特率三、UART功能说明1)正常 USART 模式下,通过这些引脚以帧的形式发送和接收串行数据:2)在同步模式下连接时需要以下引脚:四、UART...原创 2019-12-08 00:10:28 · 3360 阅读 · 0 评论 -
stm32外设使用(二)GPIO
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习本文参考:https://blog.csdn.net/qq_38410730/article/details/79858906目录一、GPIO基本结构二、GPIO的各种模式和使用场景1、模拟输入2、浮空输入3、上拉输入4、下拉输入5、开漏输出6、推挽输出7、复用开漏8...原创 2019-12-07 20:20:55 · 1496 阅读 · 0 评论 -
STM32外设使用(一) DMA
注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习目录一、DMA简介1、DMA简介2、DMA的工作原理 二、STM32的DMA结构1、DMA的主要特性2、两个DMA控制器结构① DMA1 controller② DMA2 controller3、DMA寄存器列表① 中断类② 控制传输类4、STM32的DMA工作特...原创 2019-12-06 22:21:57 · 1183 阅读 · 0 评论 -
【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
STM32F1xx官方资料:《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO )芯片数据手册(datasheet)STM32的GPIO介绍STM32引脚说明GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。STM32F103...转载 2019-12-03 23:39:30 · 559 阅读 · 0 评论 -
STM32 五个时钟源HSI、HSE、LSI、LSE、PLL 如何识别
①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不...原创 2019-12-02 01:03:17 · 31296 阅读 · 3 评论 -
stm32 AMBA 、AHB和APB总线的区别
AMBAAMBA(Advanced Microprocessor Bus Architecture)是ARM公司提出的一种开放性的SoC总线标准,现在已经广泛的应用于RISC的内核上了。AMBA定义了一种多总线系统(mulTIlevel busing system),包括系统总线和等级稍低的外设总线。AMBA支持32位、64位、128位的数据总线,和32位的地址总线,同时支持by...原创 2019-11-28 20:30:37 · 1021 阅读 · 0 评论 -
对stm32 位带访问的理解
1,位带访问的定义位带访问就是,芯片内部对该部分内存的访问,可以按bit位来进行访问,不用对整个字进行访问2,使用的范围 有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过...原创 2019-11-27 21:32:14 · 381 阅读 · 0 评论 -
stm32 寄存器和内存的关系
一、存储器及存储器映射存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射(具体地址分配参考芯片数据手册及中文参考手册)。二、寄存器及寄存器映射(一)寄存器通过给有特定功能的内存单元起一个别名,这个别名就是我们所说的寄存器。换句话说,寄存器就是一些有特定功能的内存单元。(二)...原创 2019-11-26 22:25:52 · 1301 阅读 · 6 评论 -
ARM、DSP、FPGA 的联系和区别
目录ARMDSPFPGAARM vs DSPARM vs FPGAFPGA vs DSPARMARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处理器和系...原创 2019-11-19 00:19:18 · 3011 阅读 · 0 评论 -
stm32 FreeRTOS 某个任务一直不被运行
在用FreeRTOS操作系统时,发现某一个任务一直不被运行查找后发现问题出在两个点:(1)任务资源调用冲突,当时在用两个任务去操作同一个串口,发现任务在刚刚开始的时候,两个任务都可以运行,但是这样持续运行一段时间之后,其中一个任务莫名其妙死掉,一直不被运行,思考后发现,两个任务在运行中可能调用同一个串口,在一个任务使用串口的过程中,被另一个高优先级的任务中断,然后低优先级的任务就死掉了。解...原创 2019-09-24 20:03:26 · 14047 阅读 · 5 评论