STM32
niepangu
这个作者很懒,什么都没留下…
展开
-
单片机软件复位和硬件复位的实现和个人总结的区别
微处理器复位方法:用硬件引脚RESET的复位方法;用看门狗的复位方法;自己程序控制的复位方法(本文方法,叫软件复位)。软件复位实现方法首先声明一个函数指针,指向复位后要开始执行指令的位置:void (*app_start)(void) = 0x0000;可以根据具体微处理器复位后的位置,修改后边的地址。之后,在自己的程序中想复位的地方调用app_start(); 也就是跳到0x0000位置执行指...原创 2018-06-04 20:02:31 · 18263 阅读 · 1 评论 -
STM32 中的 assert_param 函数
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。4 断言机制函数assert_param我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIP转载 2015-10-10 21:51:17 · 563 阅读 · 0 评论 -
合并BIN文件的两种方法
合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一个文件,方便烧写和生产。下面结合STM32的IAP Bootloader Code和Application Code的合并,介绍两种合并BIN文件的方法。 首先简单介绍一下STM32的IAP。IAP(In-application-programming),即在应用中编程。有了它,产转载 2015-09-17 17:04:27 · 13412 阅读 · 1 评论 -
IAR STM32 函数和变量的绝对地址定位
昨天我突然冒出个想法,能否利用函数和变量的绝对定位,实现程序的模块化更新。 也就是说,如果我要改变某个函数,只需要更新flash里面一个局部,也许只需要更新几百个字节,而无须重新下载整个上百K的程序。 经过查找资料和反复实验,终于实现了,现总结如下: 1) 把函数定位在FLASH高端的指定位置,以后更新,只更新那小块地方就可以了。 方法一: I转载 2015-10-20 11:07:51 · 2036 阅读 · 0 评论 -
ISP、IAP、ICP烧写方式的区别
玩单片机的都应该听说过ISP、IAP和ICP这几个词。一直搞不太清楚他们之间的区别。今天查了资料后总结整理如下。ISP:In System Programing 在系统编程IAP:In applicating Programing 在应用编程ICP:In Circuit Programing 在电路编程区别:1、ISP是把房子转载 2015-10-16 20:10:49 · 1396 阅读 · 0 评论 -
J-Link JTAG/SWD接口
J-Link接口是如何定义的?下面为J-Link接口定义:仿真器端口连接目标板备注 1. VCCMCU电源VCCVCC2. VCCMCU电源VCCVCC3. TRSTTRSTTest ReSeT/ pin4. GNDGND或悬空 5. TDITDITest Da转载 2015-10-17 22:22:37 · 7702 阅读 · 0 评论 -
EEPROM读写及数据管理
经常有人在QQ群讨论有关E2PROM操作、保护、失效等一些问题,今天闲来没事,简单概括总结一下咯。(才疏学浅,路过的英雄记得补刀)1)有关 芯片内部自带的E2PROM有的资深的工程师可能不是很愿意用MCU自带的E2PROM,大概是这些家伙上过什么当、受过骗还是什么的。简单说一下优缺点吧:(1)片内集成的感觉挺便宜的,和MCU一起卖的,对成本要求严格的转载 2015-09-08 15:42:53 · 1786 阅读 · 0 评论 -
STM32实验连载之四:读取芯片唯一ID号
产品唯一的身份标识的作用: ● 用来作为序列号(例如USB字符序列号或者其他的终端应用); ● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性; ● 用来激活带安全机制的自举过程; 96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种转载 2015-07-21 08:36:58 · 15659 阅读 · 0 评论 -
stm32 BKP寄存器操作[操作寄存器+库函数]
BKP是“BACKUP”的缩写,stm32f103RCTE的内部配备了10个16位宽度的BKP寄存器。在主电源切断或系统产生复位时间时,BKP寄存器仍然可以在备用电源的支持下保持其内容。 BKP在实际应用中可以存入重要数据,防止被恶意查看,或用于断电回复等。 本例实现对BKP寄存器的读写操作,和入侵检测和处理。主程序中写入寄存器后,依次打印出10个BKP寄存器数据,然后触发GPIOC1转载 2015-07-16 08:36:47 · 2527 阅读 · 1 评论 -
stm32 PVD 可编程电压监测器
stm32 PVD 可编程电压监测器作者:Changing发表时间:11-16 20:30分类:电子相关1 Comment前一篇:单片机4*4矩阵键盘当前是最后一篇 PVD (Programmable Votage Detector) ,即可编程电压监测器 。stm32库函数手册中没有细讲这个模块,只是在 PWM一章中列出了两个相关函数。但是这个功转载 2015-07-02 16:15:29 · 4488 阅读 · 1 评论 -
STM32F10x 学习笔记3(CRC计算单元)
STM32F 系列的单片机内部带了CRC32 计算单元。这个内置CRC模块的方法使用非常简单。其操作如下图所示。图 1 CRC计算单元框图归纳起来有如下几步操作:1. 开启CRC单元的时钟。RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE)2. 复位CRC模块(设置CRC_CR=0x01),这个操作把转载 2015-07-02 15:04:36 · 1012 阅读 · 0 评论 -
MDK和IAR环境仿真时,当全速运行的时候如何查看全局变量的值
接触MDK和IAR一段时间了,调试的时候主要是使用Jlink硬件仿真,以前,想查看一个全局变量的值,都打上断点,程序停下来才能查看,这毕竟有些局限性,当有查看全局变量变化范围的时候,靠断点,是做不到了,以前的方法是使用串口打印,慢慢发现在MDK和IAR里,是可以在程序全速运行的时候通过观察窗口看到变量的值是在变化的。 这太方便了MDK里需要如下图勾选途中红色方框原创 2014-12-21 19:27:42 · 10832 阅读 · 0 评论 -
STM32 FLASH的擦写寿命
这个问题,其实从STM32各个型号的datasheet就可以看出来. 对比了几个文档之后,我发现STM32F10x系列的不同型号,他们的最少擦写寿命不一样.仔细对比了下,原来是版本的问题.在老版本中,写的内容如下: 这是老版本的表述,就说最少是1K次,典型的是10K次.而后面的新版本,其内容如下: 新版本的把最少次数改为了10K次,这样的转载 2015-06-08 10:51:10 · 32681 阅读 · 0 评论 -
JTAG与SWD的区别
对于JTAG和SWD的使用区别,觉得下面这篇文章讲的比较清晰了,所以转帖到这里,希望对新手有所帮助。 SWD与JTAG区别及使用情况[转载] 上图是SEGGER说明书中给出的Jlink引脚图,可以对照着看SWD引脚与JTAG引脚的关系。 这是我手边开发板上的JTAG连接图,这个肯定是能用的。 这个是从网上找来的标准的JT转载 2015-06-08 10:08:11 · 1242 阅读 · 0 评论 -
对运行于STM32的嵌入式代码程序进行加密
目的:对运行于STM32的嵌入式代码程序进行加密编译环境:IAR Embedded System for ARM5.5一.STM32Flash组织STM32的Flash包括主存储器(HD版本,512KB)+信息块。信息块包括2KB的系统存储器(用于系统自举启动代码)和16字节的选项字节(8个字节数据+8个字节数据的反码)。 二、STM32读保护STM32读保护是通过设置RD转载 2015-06-03 18:00:41 · 13459 阅读 · 4 评论 -
CAN错误计数值变动条件
转载 2015-06-01 16:34:16 · 1377 阅读 · 0 评论 -
使用IAR+Jlink开发STM32关于下载Flash的一点发现
1、使用Jlink下载程序的使用,没有进行Flasah整片擦除,2、基于1, 出现以下这种情况, 当第一次下载一个较大程序例如30k, 第二次下载一个小程序例如10k,那么 第二次下载后,Flash区域有20K的Flash区域不是0XFF,而且是没有意义的数据以上两点已得到证实原创 2015-06-01 13:11:28 · 3270 阅读 · 0 评论 -
IAR环境下STM32+IAP方案的实现
基于STM32F103ZET6的UART通讯实现 一、什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出转载 2015-05-18 09:33:28 · 1116 阅读 · 0 评论 -
STM32 的三种不同启动模式
STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1. 用户闪存:芯片内置的Flash。2. SRAM:芯片内置的RAM 区,就是内存啦。3. 系统存储器:芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。在每个STM32的芯片上都有两个管脚BOOT0和转载 2015-10-12 19:15:12 · 2829 阅读 · 0 评论 -
STM32关闭全局中断时需要注意的问题
STM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。ARM MDK中提供了如下两个接口来禁用和开启总中断:__disable_irq(); // 关闭总中断__enable_irq(); // 开启总中断 但测试发现这样一个问题,在关闭总中断后,如果有中断触发,虽然此时不会引发中断,但在调用转载 2015-10-27 08:46:36 · 33094 阅读 · 2 评论 -
windows8.1 keil uvision4 IDE jlink 可以烧程序但是 IDE停止工作
windows8.1 keil uvision4 IDE jlink 可以烧程序但是 IDE停止工作 有时候建工程也会停止工作 经多次测试 貌似是JLinkARM驱动的问题 我重新安装了JLinkARM_V460a版驱动 然后将其目录下JLinkARM.dll替换F:\Program Files\Keil\ARM\Segger下的JLinkARM.dll 文件 完美解决问题 。 遇到转载 2017-11-02 21:56:45 · 1512 阅读 · 0 评论 -
STM32 boot跳转到APP的Jump_Address()分析
1、函数原型:void Jump_Address(void){if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000){test = (*(volatile u32*)ApplicationAddress);JumpAddress = *(volatile u32*) (Applica转载 2016-06-12 10:29:40 · 1379 阅读 · 0 评论 -
STM32 IAP程序跳转前后的中断问题
跳转前最好使用__disable_irq(); 关闭总中断跳转到APP后再打开总中断__enable_irq();我使用的是IAR,其他编译环境中这两个调用的具体名称需要另行测试。原创 2016-06-24 11:22:54 · 7977 阅读 · 0 评论 -
STM32之CAN ---CAN ID过滤器分析
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。 为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(1转载 2016-05-17 19:30:42 · 1257 阅读 · 0 评论 -
stm32 IAR环境printf函数调用
在串口都配置好的情况下,在main.c文件中加入#include #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif PUTCHAR转载 2016-04-19 10:56:58 · 1903 阅读 · 0 评论 -
IAR #pragma optimize 指令
IAR #pragma optimize 指令发布时间:2012-07-13 09:53:50技术类别:嵌入式 IAR #pragma optimize 指令 #pragma optimize= none //one of none, low, medium, high, size, or speed放在被优转载 2014-07-23 16:24:28 · 4787 阅读 · 0 评论 -
栈,堆,全局,文字常量,代码区总结
一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。每个C ++对转载 2016-03-07 19:47:36 · 770 阅读 · 0 评论 -
[转载]startup_stm32f10x_ld_vl.s中的vl是什么意思
原文地址:startup_stm32f10x_ld_vl.s中的vl是什么意思作者:123信步123STM32 启动文件选择- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices- startup_stm32f10x_ld.s: for STM32 Low density devices-转载 2016-03-08 21:15:19 · 1157 阅读 · 0 评论 -
STM32读写保护功能及设置
STM32读写保护功能及设置功能:: 读保护设置后将不能读出flash的内容;当解除读保护的时候stm32会自动擦出整篇flash;设置: 读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序运行先 开保护) 解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设;(1)设置读保护: if(FLASH_GetReadOutProte原创 2016-03-31 10:06:36 · 6984 阅读 · 3 评论 -
STM32 大小端模式 与 堆栈及其增长方向分析
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示转载 2016-03-06 22:45:00 · 1158 阅读 · 0 评论 -
hex格式介绍及转bin格式的源程序
最近在写一个编程器,遇到hex格式文件转换为bin格式文件的问题,通过查阅各类资料,对该格式有了了解。所以在此介绍一下hex格式,并将自己的程序思路写下来,供大家探讨一下。 Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用于将程序或数据传输存储到ROM转载 2016-02-19 11:18:08 · 2231 阅读 · 0 评论 -
【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码)
【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码) 最近做一个产品,由于是新品不了解现场环境,导致仪表到现场安装完了还要改程序。这样就悲剧了要把仪表拆开,断开看门狗连上电脑才能修改程序。所以想要使用IAP(通俗的说就是程序下修改ROM的内容)来修改程序,这样就可以避免以上问题。 带着这样的问题在网上搜索相关内容,首先搜索到的是战舰开发板串口升转载 2016-02-18 09:02:49 · 3600 阅读 · 0 评论 -
利用ST提供的USB例程实现USB IAP功能
我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM转载 2016-01-04 17:34:00 · 1708 阅读 · 1 评论 -
分享STM32代码读保护个人解决方案
步骤:1.准备工作:HEX文件和JLINK驱动(本人使用的是Setup_JLinkARM_V415e)安装完毕后,可以在开始--所有程序--SEGGER--J-Flash ARM打开该应用程序,如下图 先进行一下设置,对要写入的芯片和写入方式选择JATG还是SWD选择芯片型号 2.打开要烧写的HEX文件:File--Open data file ,转载 2015-12-17 08:24:11 · 3557 阅读 · 0 评论 -
解决stm32进入HardFault_Handler的定位办法
1、首先在HardFault_Handler的while(1)处打上断点。2、等待代码运行到此,这时查看寄存器LR,在左边一个是工程,一个是寄存器。 上面的LR是我正常时copy的,一般在进入hardfault时,会变成下图的值,这时就可以知道该看那个寄存器的值,当时我那里是0xFFFFFFFD,所以是看PSP的地址。3、找到该看的地址后然后如下图打开内存,转载 2015-12-16 08:22:38 · 6591 阅读 · 1 评论 -
逐次逼近比较型adc原理
adc模块的精度一般有8位、10位、12位、16位、24位。以5V的ADC模块为例介绍:8位的精度:把0~5V分成256份,每份表示5/256=0.02V;10位的精度:把0~5V分成1024份,每份表示5/1024=0.005V;12位的精度:把0~5V分成4096份,每份表示5/4096=0.0012V;16位的精度:把0~5V分成65536份,每份表示5/65536=转载 2015-10-29 08:12:15 · 10598 阅读 · 1 评论 -
STM32IAP升级-----编写IAP升级遇到的问题总结
IAP的源码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧)还有另一篇博客总结的IAP:http://blog.csdn.net/super_demo/article/details/32133257一,串口通信问题1,串口通信两端的TTL电平要转载 2015-10-27 09:19:29 · 889 阅读 · 0 评论 -
分享一下官网USB读卡器移植 --> 附上原子战舰的测试工程(TF卡SDIO模式 + SPI-flash)
前段时间搞好了STM32的SDIO驱动SD卡的底层驱动http://www.openedv.com/posts/list/27146.htm在此感谢所有帮过的兄弟朋友们,谢谢你们的指点。这个星期搞USB去了,移植了一下官网的USB例程,在MDK软件安装路径下也有一个例程V2.x版本的,我移植的是官网的V4.0版本的,具体见附件《stsw-stm32121》或者官网下载http://www.转载 2015-04-17 08:57:29 · 1668 阅读 · 0 评论 -
分享一下最近完成测试的STM32模拟USB转串口经验
1、学习USB的时候玩的,感觉USB真的太复杂了,看书看到头大,感觉脑子完全乱了,好像不记东西了一样,哎2、刚搞好这个,先搞其他的再来学习USB方面的知识。3、这个STM32模拟USB转串口的是移植官网的一个例程,发现官网的这个例程BUG还不少,呵呵4、拷贝例程的代码,具体见附件工程中的USB文件夹代码5、主要就是修改hw_config.c和hw_config.h这两个文件中的代码转载 2015-04-17 08:58:02 · 4342 阅读 · 2 评论 -
systick_config 解析
static __INLINE uint32_t SysTick_Config(uint32_t ticks){ if (ticks > SYSTICK_MAXCOUNT) return (1); SysTick->LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; NVIC_转载 2014-12-24 13:25:24 · 12753 阅读 · 0 评论