
STM32相关
文章平均质量分 71
anbaixiu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32软件复位的实现方法
前些天写程序的时候,需要做一个自动复位的功能,也就是当收到外部通讯设备复位指令时,主设备立刻执行复位操作。当时是想到的用看门狗实现。但是觉得似乎不太妥当,因为看门狗的复位是需要一定的时间。而在这段时间内系统还是处于正常运行当中,而且所有中断都会正常响应。这恰好与要实现的功能南辕北辙。需求是当收到复位指令时,系统停止执行后面的所有操作,包含中断响应。所以看门狗无法实现。 我用的是...转载 2018-07-22 16:17:53 · 41944 阅读 · 3 评论 -
STM32的堆与栈
上一篇博客解决了因为堆栈的设置空间不够而引发的“命案”,这次我们就来看看它的“杀人动机”。首先我们来认识一下堆与栈的含义():(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。(3)全局区(静态区)(st...转载 2018-04-23 10:12:26 · 2284 阅读 · 1 评论 -
STM32串口第一个字节丢失问题的分析过程
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。...转载 2018-04-18 22:29:26 · 3261 阅读 · 1 评论 -
STM32的内存管理和堆栈相关的认知
今天仔细读了一下内存管理的代码,然后还有看了堆栈的相关知识,把以前不太明白的一些东西想通了,写下来,方便以后查看,也想大家看了能指出哪里不对,然后修改。 首先,先看一下stm32的存储器结构。Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。FLASH存储下载的程序。SRAM是存储运行程序中的数据。所以,只...转载 2018-04-23 10:02:59 · 691 阅读 · 0 评论 -
一个关于使用STM32F4芯片CCM RAM时的异常分析
前言有客户用STM32F427芯片,程序将CSTACK放在CCM RAM中,结果测试过一段时间的板子都出现了不能正常运行的情况。这个现象一度让我们怀疑是否是CCM RAM在测试过程中遭到了破坏,导致我们在解决问题的道路上浪费了不少时间。事实证明STM32的CCM RAM并没有那么脆弱,而解决问题时尽力从多个角度进行验证,不放过所有可能出问题的环节之心态更为重要。在具体讨论问题的原因之前,不妨先介绍...转载 2018-04-23 09:26:34 · 3233 阅读 · 2 评论 -
STM32大小端模式与堆栈及其增长方向
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示栈大小是0X800,也就是204...转载 2018-03-18 14:50:37 · 868 阅读 · 0 评论 -
stack_size和heap_size大小设置
裸机程序里面这两个值 在程序中我要怎么计算才能知道分配多少合适?1,Stack Size,一般小工程0X400足够,我们综合实验才设置0X1000就够用,所以默认无需设置太大。2,Heap Size,如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可。...转载 2018-03-18 14:48:08 · 48888 阅读 · 3 评论 -
STM32F4中GPIO_PuPd寄存器设置上拉与下拉问题
首先 上下拉 是给IO一个默认的状态 比如控制EN的话,那么高有效的我们就下拉,低有效的话我们就上拉而 很多IO 由于CMOS工艺问题会出现float的现象,所以不能悬空 需要PU PD。上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。下拉就相反了,指输入低电平,然后接一个下拉电阻...转载 2018-02-20 17:58:22 · 3174 阅读 · 0 评论 -
STM32定义堆栈地址到ram区顶部
本设置针对stm32f103rbt6的设置,该芯片RAM大小为20kB,故RAM区地址范围为0x20000000—0x20005000,芯片信息如下图所示;第一步:设置.sct文件;;*************************************************************; *** Scatter-Loading D转载 2018-01-01 22:48:08 · 5784 阅读 · 4 评论 -
STM32之内存五 (attribute at属性)
http://www.keil.com/support/man/docs/armcc/armcc_chr1359124981140.htm原创 2017-12-18 13:48:22 · 1444 阅读 · 0 评论 -
STM32内存之四(CCM)
CCM - 极致发挥STM32F4性能的利器 (2012-06-27 21:35:42)转载▼标签: stm32 ccm it分类: 嵌入式CCM(Core Coupled Memory)是给F4内核专用的全速64KB RAM, 它们没有经过总线矩阵, F4内核与之直接相连, 地址空间在0x转载 2017-12-18 13:19:58 · 5839 阅读 · 0 评论 -
STM32学习笔记之__attribute__ ((at())绝对定位分析
学习STM32也会遇到这样的绝对定位的问题如下:uint8_t UART_RX_BUF[1024] __attribute__ ((at(0X20001000))); //就是将串口接收的数据定位到RAM中起始地址为0X20001000;绝对定位要么定位到flash、要么定位到RAM,这里我们将定位在flash进行说明。MDK如何实现将数据存储到FLASH指定地址? 我们在烧...转载 2018-04-23 10:18:39 · 4095 阅读 · 0 评论 -
STM32 硬件错误HardFault_Handler的真凶
STM32出现HardFault_Handler故障的原因主要有两个方面:1、内存溢出或者访问越界。2、堆栈溢出。最近遇到的问题是栈溢出,情况是这样的,举例说明:static char data[10000];void fun1(unsigned char *buf){int i=0;for(i=0; i<5000; i++){data = buf;}}void fun2(void){un...转载 2018-04-23 10:37:57 · 17660 阅读 · 1 评论 -
STM32F4系统时钟设置之二
STM32F407系统时钟配置时钟树方法一,采用官方库提供的配置(这里外部晶振25MHz,系统配置为168MHz)STM32F4启动与STM32F10X不同,时钟已经默认配置好启动代码,文件:startup_stm32f4xx.sReset handler Reset_Handler PROC EXPORT Reset_Handler ...转载 2018-05-29 21:49:43 · 3071 阅读 · 2 评论 -
STM32F407时钟设置
这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。 /** * @说明 配置STM32F407的时钟系统 * @参数 无 * @返回 无 * @说明 void Clock_Config(void) 按如下表格配置时钟 **==================================================================*...转载 2018-05-29 20:27:44 · 3565 阅读 · 0 评论 -
STM32时钟配置方法详解
一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、H...转载 2018-05-28 11:44:53 · 18593 阅读 · 3 评论 -
关于STM32的CPU的使用率~裸机不带系统
1. 如果你不跑操作系统,CPU肯定一直都是100%使用的,哪怕你里面是延时等待,CPU也是一直在执行空语句nop,因为STM32里面是有一个CPU。2.对于stm32总是百分百。只是有多少时间空闲,多少时间干活!3.楼主的意思是实际CPU用来干正事的时间,在整个时间里的比例,打个比方,如果工作50mS,再等待200mS,完成一个大循环,那么CPU的使用率就是20%。如果楼主的程序是以大循环方式做...转载 2018-04-21 14:27:09 · 10868 阅读 · 1 评论 -
STM32 KEIL _MAP文件解析
0、写在前面相信有较大项目开发经验的朋友都曾遇到内存溢出的问题,那么大家都是如何分析这类问题的呢?大家遇到HardFault_Handler 有对map分析过吗? 首先讲述一下关于map在MDK-ARM中的配置。其实,在MDK-ARM中,我们可以根据自己的情况(不同配置),在map文件中输出对应(我们需要)的内容。默认情况下,输出所有信息。 Project -> Options for Ta...转载 2018-04-23 11:45:15 · 2067 阅读 · 0 评论 -
STM32硬件错误HardFault_Handler的处理方法
在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。这说明STM32出现了硬件错误。 STM32出现硬件错误可能有以下原因: (1)数组越界操作; (2)内存溢出,访问越界; (3)堆栈溢出,程序跑飞; (4)中断处理错误; ...转载 2018-04-23 11:40:48 · 5529 阅读 · 0 评论 -
stm32使用MDK开发中的一些常见问题
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://no001.blog.51cto.com/1142339/8571171. 解决:keil报错invalid redeclaration of type name "s32"答案:一般在Target Options C/C++选项卡里的Include Paths 里要添加几个固定的...转载 2018-04-23 11:37:47 · 2405 阅读 · 0 评论 -
内存之三
(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack) bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data转载 2017-12-18 11:35:16 · 305 阅读 · 0 评论 -
RO RW ZI-Data之经典描述
ARM编译中的RO、RW和ZI DATA区段2008-12-17 14:58ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成一个ARM程序包含3部分:RO段,RW段和ZI段RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write转载 2018-01-01 22:44:00 · 386 阅读 · 0 评论 -
STM32F4的CCM之二
前言有客户用STM32F427芯片,程序将CSTACK放在CCM RAM中,结果测试过一段时间的板子都出现了不能正常运行的情况。这个现象一度让我们怀疑是否是CCM RAM在测试过程中遭到了破坏,导致我们在解决问题的道路上浪费了不少时间。事实证明STM32的CCM RAM并没有那么脆弱,而解决问题时尽力从多个角度进行验证,不放过所有可能出问题的环节之心态更为重要。在具体讨转载 2017-12-31 11:46:54 · 2930 阅读 · 0 评论 -
STM32启动模式说明
参看 百度文库 道客巴巴 豆丁网中“STM32启动模式说明”转载 2017-06-14 14:10:33 · 346 阅读 · 0 评论 -
STM32启动代码解析
1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 2 ;然后在RAM中分配变量使用的堆 3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配 4 ;分配完成后,再定义和实现相应的中断函数, 5 ;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定转载 2017-06-14 13:36:47 · 1743 阅读 · 0 评论 -
STM32时钟之3
大家都知道在使用单片机时,时钟速度决定于外部晶振或内部RC振荡电路的频率,是不可以改变的。而ARM的出现打破了这一传统的法则,可以通过软件随意改变时钟速度。这一出现让我们的设计更加灵活,但是也给我们的设计增加了复杂性。为了让用户能够更简单的使用这一功能,STM32的库函数已经为我们设计的更加简单方便。 在比较靠前的版本中,我们需要向下面那样设置时钟:ErrorStatus H转载 2017-06-14 11:55:02 · 479 阅读 · 0 评论 -
STM32时钟之2
本章参考资料:《 STM32F4xx 中文参考手册》 RCC 章节。学习本章时,配合《 STM32F4xx 中文参考手册》 RCC 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。RCC : reset clock control 复位和时钟控制器。本章我们主要讲解时钟部分,特别是要着重理解时钟树,理解了时钟树, F429 的一切时钟的来龙去脉都会了如指掌。转载 2017-06-14 11:53:31 · 571 阅读 · 0 评论 -
STM32时钟
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输转载 2017-06-14 11:52:15 · 613 阅读 · 0 评论 -
STM32DMA使用详解
MA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRA转载 2017-06-29 18:10:09 · 3711 阅读 · 0 评论 -
STM32固件库使用分析
STM32的V3.3.0库,内有CMSIS的文件夹为arm Cortex微控制器软件接口标准,现在将我实际工作中的作一个简要分析: 1.选择启动文件:根据自己所用的芯片的型号,选择正确的启动文件。这个根据数据手册上的划分。例如STM32F101VBT6,就选择startup_stm32f10x_md.s,在这个文件里,首选要定义自已的堆和栈的大小,这个根据自已的需要确定。文件中已经定义转载 2017-06-29 18:04:02 · 996 阅读 · 0 评论 -
STM32 _hd_md_ld_vl_xl说明
- Low-density Value line devices areSTM32F100xx microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes. -Low-density devices are STM32F101xx, STM32F102xx and STM32F103x转载 2017-06-29 18:03:01 · 507 阅读 · 0 评论 -
STM32开发的一个重要图表
转载 2017-06-04 15:31:44 · 534 阅读 · 0 评论 -
stm32f4**开发相关记录
inc文件夹里放的是头文件,一共六个,以后我们自己的头文件也可以放到这里来。 stm32f4xx.h 包含了stm32f4的寄存器结构体的定义(类似于C51的reg52.h)core_cm4.h 内核功能的定义,比如NVIC相关寄存器的结构体core_cmInstr.h转载 2017-06-04 15:24:30 · 428 阅读 · 0 评论 -
STM32开发的一些相关知识点(感谢编写者)
1、STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。 其次是配置GPIO,GPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。 接着转载 2017-06-04 15:18:03 · 954 阅读 · 0 评论 -
STM32CUBEMX相关
Ⅰ、写在前面相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年前第一版到现在已经有多个版本了,功能也从简单越来越强大了。 STM32CubeMX是一个配置STM32代码的工具,它把很多东西封装的比较好,硬件抽象层、中间层、示例代码等。 现在ST公司升级和维护的库主要就是STM32CubeMX的HAL库和转载 2017-06-28 19:29:41 · 1456 阅读 · 0 评论 -
指令周期
机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6个S周期(状态周期)组成。一个S周期=2个时钟周期,所以8051单片机的一个机器周期=6个状态周期=12个时钟周期。指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不转载 2017-05-27 16:04:34 · 2737 阅读 · 0 评论 -
STM32F4**时钟设置
STM32F4时钟设置分析本文博客链接:http://blog.youkuaiyun.com/jdh99,作者:jdh,转载请注明.环境:主机:WIN7开发环境:MDK4.72MCU:STM32F407VGT6STM32F4启动与STM32F10X不同,时钟已经默认配置好.1.启动代码:文件:s转载 2017-06-14 15:59:36 · 1320 阅读 · 0 评论 -
STM32F407时钟配置
这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。 /** * @说明 配置STM32F407的时钟系统 * @参数 无 * @返回 无 * @说明 void Clock_Config(void) 按如下表格配置时钟 **===================================转载 2017-06-14 17:02:58 · 1355 阅读 · 0 评论 -
STM32F4的CCM内存之一
我们知道STM32F4当中有个CCM内存,如图所示,这个内存是挂在D总线上直接和内核相连,因此除了内核之外谁都不能访问,那么我们怎么将其利用起来呢? 首先,我们可以使用Keil的设置选项,将IRAM2打勾,让编译器选择什么时候使用这个内存。显然,我们还可以将这两个地址修改一下,将IRAM1改为0x10000000,这样,编译器就会优先分配CCM内存。转载 2017-12-31 11:22:14 · 3714 阅读 · 0 评论 -
STM32内存之二
转载 2017-12-15 18:23:59 · 375 阅读 · 0 评论