- 博客(94)
- 资源 (3)
- 收藏
- 关注
转载 Modbus RTU ASCII
二、两种传输方式 控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。ASCII模式: 地址 功能代码 数据数量 数据1 ... 数据n LRC高字节 LRC低字节 回车 换行RTU模式地址 功能代...
2018-09-03 18:41:43 3731
转载 STM32软件复位的实现方法
前些天写程序的时候,需要做一个自动复位的功能,也就是当收到外部通讯设备复位指令时,主设备立刻执行复位操作。当时是想到的用看门狗实现。但是觉得似乎不太妥当,因为看门狗的复位是需要一定的时间。而在这段时间内系统还是处于正常运行当中,而且所有中断都会正常响应。这恰好与要实现的功能南辕北辙。需求是当收到复位指令时,系统停止执行后面的所有操作,包含中断响应。所以看门狗无法实现。 我用的是...
2018-07-22 16:17:53 41363 3
转载 STM32F4系统时钟设置之二
STM32F407系统时钟配置时钟树方法一,采用官方库提供的配置(这里外部晶振25MHz,系统配置为168MHz)STM32F4启动与STM32F10X不同,时钟已经默认配置好启动代码,文件:startup_stm32f4xx.sReset handler Reset_Handler PROC EXPORT Reset_Handler ...
2018-05-29 21:49:43 2882 2
转载 STM32F407时钟设置
这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。 /** * @说明 配置STM32F407的时钟系统 * @参数 无 * @返回 无 * @说明 void Clock_Config(void) 按如下表格配置时钟 **==================================================================*...
2018-05-29 20:27:44 3248
转载 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 18341 3
转载 STM32 KEIL _MAP文件解析
0、写在前面相信有较大项目开发经验的朋友都曾遇到内存溢出的问题,那么大家都是如何分析这类问题的呢?大家遇到HardFault_Handler 有对map分析过吗? 首先讲述一下关于map在MDK-ARM中的配置。其实,在MDK-ARM中,我们可以根据自己的情况(不同配置),在map文件中输出对应(我们需要)的内容。默认情况下,输出所有信息。 Project -> Options for Ta...
2018-04-23 11:45:15 1983
转载 STM32硬件错误HardFault_Handler的处理方法
在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。这说明STM32出现了硬件错误。 STM32出现硬件错误可能有以下原因: (1)数组越界操作; (2)内存溢出,访问越界; (3)堆栈溢出,程序跑飞; (4)中断处理错误; ...
2018-04-23 11:40:48 5415
转载 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 2211
转载 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 17088 1
转载 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 3972
转载 STM32的堆与栈
上一篇博客解决了因为堆栈的设置空间不够而引发的“命案”,这次我们就来看看它的“杀人动机”。首先我们来认识一下堆与栈的含义():(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。(3)全局区(静态区)(st...
2018-04-23 10:12:26 2213 1
转载 STM32的内存管理和堆栈相关的认知
今天仔细读了一下内存管理的代码,然后还有看了堆栈的相关知识,把以前不太明白的一些东西想通了,写下来,方便以后查看,也想大家看了能指出哪里不对,然后修改。 首先,先看一下stm32的存储器结构。Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。FLASH存储下载的程序。SRAM是存储运行程序中的数据。所以,只...
2018-04-23 10:02:59 659
转载 一个关于使用STM32F4芯片CCM RAM时的异常分析
前言有客户用STM32F427芯片,程序将CSTACK放在CCM RAM中,结果测试过一段时间的板子都出现了不能正常运行的情况。这个现象一度让我们怀疑是否是CCM RAM在测试过程中遭到了破坏,导致我们在解决问题的道路上浪费了不少时间。事实证明STM32的CCM RAM并没有那么脆弱,而解决问题时尽力从多个角度进行验证,不放过所有可能出问题的环节之心态更为重要。在具体讨论问题的原因之前,不妨先介绍...
2018-04-23 09:26:34 2991 2
转载 浅谈C++/JAVA/C#运行机制和执行效率
浅谈C++/JAVA/C#运行机制和执行效率 估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧。 一、运行机制 1、JAVA-编译和解释型语言 一个JAVA文件,首先会由JAVA编译器(JAVAC)编译成class(字...
2018-04-23 00:09:29 1792
转载 关于STM32的CPU的使用率~裸机不带系统
1. 如果你不跑操作系统,CPU肯定一直都是100%使用的,哪怕你里面是延时等待,CPU也是一直在执行空语句nop,因为STM32里面是有一个CPU。2.对于stm32总是百分百。只是有多少时间空闲,多少时间干活!3.楼主的意思是实际CPU用来干正事的时间,在整个时间里的比例,打个比方,如果工作50mS,再等待200mS,完成一个大循环,那么CPU的使用率就是20%。如果楼主的程序是以大循环方式做...
2018-04-21 14:27:09 9641 1
转载 STM32串口第一个字节丢失问题的分析过程
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。...
2018-04-18 22:29:26 3185 1
转载 STM32大小端模式与堆栈及其增长方向
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示栈大小是0X800,也就是204...
2018-03-18 14:50:37 809
转载 stack_size和heap_size大小设置
裸机程序里面这两个值 在程序中我要怎么计算才能知道分配多少合适?1,Stack Size,一般小工程0X400足够,我们综合实验才设置0X1000就够用,所以默认无需设置太大。2,Heap Size,如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可。...
2018-03-18 14:48:08 48037 3
转载 STM32F4中GPIO_PuPd寄存器设置上拉与下拉问题
首先 上下拉 是给IO一个默认的状态 比如控制EN的话,那么高有效的我们就下拉,低有效的话我们就上拉而 很多IO 由于CMOS工艺问题会出现float的现象,所以不能悬空 需要PU PD。上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。下拉就相反了,指输入低电平,然后接一个下拉电阻...
2018-02-20 17:58:22 3023
转载 STM32定义堆栈地址到ram区顶部
本设置针对stm32f103rbt6的设置,该芯片RAM大小为20kB,故RAM区地址范围为0x20000000—0x20005000,芯片信息如下图所示;第一步:设置.sct文件;;*************************************************************; *** Scatter-Loading D
2018-01-01 22:48:08 5601 4
转载 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 366
转载 校准与标定
标定的主要作用是: 1)确定仪器或测量系统的输入—输出关系,赋予仪器或测量系统分度值; 2)确定仪器或测量系统的静态特性指标; 3)消除系统误差,改善一起或系统的正确度。 在科学测量中,标定是一个不容忽视的重要步骤。 必须依靠专用的标准设备来确定传感器的输入-输出转换关系,这个过程就称为标定。简单地说,利用标准器具对传感器进行标度的 过程称为标定。具
2017-12-31 12:52:11 4285
转载 STM32F4的CCM之二
前言有客户用STM32F427芯片,程序将CSTACK放在CCM RAM中,结果测试过一段时间的板子都出现了不能正常运行的情况。这个现象一度让我们怀疑是否是CCM RAM在测试过程中遭到了破坏,导致我们在解决问题的道路上浪费了不少时间。事实证明STM32的CCM RAM并没有那么脆弱,而解决问题时尽力从多个角度进行验证,不放过所有可能出问题的环节之心态更为重要。在具体讨
2017-12-31 11:46:54 2643
转载 STM32F4的CCM内存之一
我们知道STM32F4当中有个CCM内存,如图所示,这个内存是挂在D总线上直接和内核相连,因此除了内核之外谁都不能访问,那么我们怎么将其利用起来呢? 首先,我们可以使用Keil的设置选项,将IRAM2打勾,让编译器选择什么时候使用这个内存。显然,我们还可以将这两个地址修改一下,将IRAM1改为0x10000000,这样,编译器就会优先分配CCM内存。
2017-12-31 11:22:14 3594
转载 ARM全解析 ARM8/ARM7/A9/A15等区别
泡泡网CPU频道12月19日 前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额。Cortex-A50是继Cortex-A15之后的又一重量级产品,将会直接影响到主流PC市场的占有率。围绕该话题,我们今天不妨总结一下近几年来手机端较为主流的ARM处理器。 以由
2017-12-21 13:04:35 26747 1
转载 linux与andriod区别
大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会讲到Android系统在Linux系统之上扩展的部分功能和驱动。 虽然Android基于Linux内核,但是它与Linux之间还是有很大的差别,比如Android在Linux内核的基础上添加了自己所
2017-12-21 11:48:47 1004
原创 STM32之内存五 (attribute at属性)
http://www.keil.com/support/man/docs/armcc/armcc_chr1359124981140.htm
2017-12-18 13:48:22 1396
转载 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 5618
转载 内存之三
(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack) bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data
2017-12-18 11:35:16 237
转载 UART与USART区别
USART:通用同步和异步收发器UART:通用异步收发器当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能。这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下
2017-11-26 10:32:48 35637 6
转载 如何正确理解开漏输出和推挽输出
作者:知乎用户链接:https://www.zhihu.com/question/28512432/answer/41217074来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我觉得下面这个「网上资料」还是很不错的。单片机I/O口推挽输出与开漏输出的区别(转)===================分割线================
2017-11-19 06:16:10 45181 22
转载 (转)keil+stm32+JTAG利用swd方式进行printf输出
(转)keil+stm32+JTAG利用swd方式进行printf输出出处:http://www.douban.com/note/248637026/-----------------------------------------------------------------------------------------------作者:pri
2017-11-11 10:32:42 1450
转载 (转)keil+stm32+JTAG利用swd方式进行printf输出
出处:http://www.douban.com/note/248637026/-----------------------------------------------------------------------------------------------作者:prife感谢:hexlog@gmail.com----------------------------
2017-11-11 10:29:48 4574
转载 大端小端与MSB和LSB
大端(Big-endian):数据的高位字节存放在地址的低端 低位字节存放在地址高端;小端(Little-endian):数据的高位字节存放在地址的高端 低位字节存放在地址低端;举个简单而又容易理解的例子:uint_16 temp = 0x12345678;地址大端小端00x000010x120x780x000020x340x560x000030x560x340x000040x780x12 其中的
2017-11-09 11:43:28 14637 1
转载 STM32内存之一
今天仔细读了一下内存管理的代码,然后还有看了堆栈的相关知识,把以前不太明白的一些东西想通了,写下来,方便以后查看,也想大家看了能指出哪里不对,然后修改。 首先,先看一下stm32的存储器结构。Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB
2017-10-29 21:06:06 427
转载 嵌入式程序员应知道的几个基本问题
Static 6. 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声
2017-10-17 14:46:56 408
转载 数据对齐
转载自:http://www.cnblogs.com/bakari/archive/2012/08/27/2658956.html数据对齐实际上是内存字节的对齐,今天偶然翻开自己以前做的笔记,发现做了好多的题,但现在对于我来说觉得很陌生。上网查了一下数据对齐的原因和方式,现在把它整理出来以备之后的学习复习巩固。转载请注出处:http://www.cnblogs.com/bakari
2017-10-17 14:45:12 270
转载 startup_stm32f40xx.s: error: A3906U: Malformed via file '.\debug\startup_stm32f40xx._ia'.
startup_stm32f40xx.s: error: A3906U: Malformed via file '.\debug\startup_stm32f40xx._ia'.在其他电脑可以编译通过,我的电脑编译其他工程也能通过,就这个工程编译出现这个错误,不知是什么原因,有人遇到过吗?1.听说是文件夹名带有空格的缘故2.我也遇到了,最后把一个include路径删除了,就好了
2017-10-10 17:09:28 7127 1
转载 STM32F4之FPU性能的充分发挥-设置要点
浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完全是噩梦,对32为单片机来说也不会有多大改善。虽然将浮点数进行Q化处理能充分发挥32位单片机的运算性能,但是精度受到限制而不会太高。对于有FPU(浮点运算单元)的单片机或者CPU来说,浮点加法只是几条指令的事情。 现在又FPU或者硬件
2017-10-06 17:23:30 1383
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人