STM32F7与STM32F4的复位序列比较
使用 USART 实现STM32F407_STM32F417 的 IAP
AN3965应用笔记使用 USART 实现STM32F40x/STM32F41x 的 IAP 1 前言对于大多数基于 Flash 的系统而言,在最终产品中安装之后,能够对固件进行更新,这一点非常重要。
这一功能被称为在应用中编程 (IAP)。
此应用笔记的目的就是为创建 IAP 应用程序提供通用准则。
STM32F4xx 微控制器能够运行用户指定的固件,从而执行微处理器内置 Flash 的 IAP。
借助这一特性,在重新编程过程中可以使用任意类型的通信协议。
本应用笔记以 USART 为例进行说明。
2011 年 10 月文档 ID 022104 版本11/11目录AN3965目录1前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12IAP 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.1原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2IAP 驱动程序说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33运行 IAP 驱动程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.1超级终端配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2执行 IAP 驱动程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54IAP 驱动程序菜单 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.1将映像下载到内部 Flash 中 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.2从内部 Flash 上传映像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74.3执行新程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74.4禁止写保护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5STM32F4xx IAP 实现总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6用户程序应满足的条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102/11文档 ID 022104 版本 1AN3965IAP 概述概述2 IAPSTM32F4xx 器件可在意法半导体的 STM324xG-EVAL 评估板上实现。
第二章 实验平台硬件资源详解-正点原子探索者STM32F4开发板STM32F4开发指南
第二章实验平台硬件资源详解本章,我们将节将向大家详细介绍ALIENTEK探索者STM32F4开发板各部分的硬件原理图,让大家对该开发板的各部分硬件原理有个深入理解,并向大家介绍开发板的使用注意事项,为后面的学习做好准备。
本章将分为如下两节:1.1,开发板原理图详解;1.2,开发板使用注意事项;2.1 开发板原理图详解2.1.1 MCUALIENTEK探索者STM32F4开发板选择的是STM32F407ZGT6作为MCU,该芯片是STM32F407里面配置非常强大的了,它拥有的资源包括:集成FPU和DSP指令,并具有192KB SRAM、1024KB FLASH、12个16位定时器、2个32位定时器、2个DMA控制器(共16个通道)、3个SPI、2个全双工I2S、3个IIC、6个串口、2个USB(支持HOST /SLAVE)、2个CAN、3个12位ADC、2个12位DAC、1个RTC(带日历功能)、1个SDIO接口、1个FSMC 接口、1个10/100M以太网MAC控制器、1个摄像头接口、1个硬件随机数生成器、以及112个通用IO口等。
该芯片的配置十分强悍,很多功能相对STM32F1来说进行了重大改进,比如FSMC的速度,F4刷屏速度可达3300W像素/秒,而F1的速度则只有500W左右。
MCU部分的原理图如图2.1.1.1(因为原理图比较大,缩小下来可能有点看不清,请大家打开开发板光盘的原理图进行查看)所示:图2.1.1.1 MCU部分原理图上图中U4为我们的主芯片:STM32F407ZGT6。
这里主要讲解以下3个地方:1,后备区域供电脚VBA T脚的供电采用CR1220纽扣电池和VCC3.3混合供电的方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给其供电。
这样,VBA T总是有电的,以保证RTC的走时以及后备寄存器的内容不丢失。
STM32微控制器寄存器说明
PLLXTPRE:HSE 分频器作为 PLL 输入(HSE divider for PLL entry)。由软件
置‘1’或清‘0’来分频 HSE 后作为 PLL 输入时钟。只能在关闭 PLL 时才能
写入此位。
0:HSE 不分频; 1:HSE 2 分频
PLLSRC:PLL 输入时钟源(PLL entry clock source)。由软件置‘1’或清‘0’
保 HSI HSI
留 RDY ON
位 31:26 位 25 位 24
位 23:20 位 19 位 18
位 17
位 16
位 15:8 位 7:3
保留,始终读为 0。 PLLRDY:PLL 时钟就绪标志(PLL clock ready flag)。PLL 锁定后由硬件置‘1’。 0:PLL 未锁定; 1:PLL 锁定。 PLLON:PLL 使能(PLL enable)。由软件置‘1’或清零。当进入待机和停止 模式时,该位由硬件清零。当 PLL 时钟被用作或被选择将要作为系统时钟时, 该位不能被清零。 0:PLL 关闭; 1:PLL 使能。 保留,始终读为 0。 CSSON:时钟安全系统使能(Clock security system enable)。由软件置‘1’或 清零以使能时钟监测器。 0:时钟监测器关闭; 1:如果外部 4-16MHz 振荡器就绪,时钟监测器开启。 HSEBYP:外部高速时钟旁路(External high-speed clock bypass)。在调试模式 下由软件置‘1’或清零来旁路外部晶体振荡器。只有在外部 4-16MHz 振荡器 关闭的情况下,才能写入该位。 0:外部 4-16MHz 振荡器没有旁路; 1:外部 4-16MHz 外部晶体振荡器被旁路。 HSERDY:外部高速时钟就绪标志(External high-speed clock ready flag)。由硬 件置‘1’来指示外部 4-16MHz 振荡器已经稳定。在 HSEON 位清零后,该位 需要 6 个外部 4-16MHz 振荡器周期清零。 0:外部 4-16MHz 振荡器没有就绪; 1:外部 4-16MHz 振荡器就绪。 HSEON:外部高速时钟使能(External high-speed clock enable)。由软件置‘1’ 或清零。当进入待机和停止模式时,该位由硬件清零,关闭 4-16MHz 外部振荡 器。当外部 4-16MHz 振荡器被用作或被选择将要作为系统时钟时,该位不能被 清零。 0:HSE 振荡器关闭; 1:HSE 振荡器开启。 HSICAL[7:0]:内部高速时钟校准(Internal high-speed clock calibration)。系统 启动时,这些位被自动初始化。 HSITRIM[4:0]:内部高速时钟调整(Internal high-speed clock trimming)。由软 件写入来调整内部高速时钟,它们被叠加在 HSICAL[7:0]数值上。这些位在
第10章 STM32复位启动和中断控制1
在ARM编程领域中,凡是打断程序顺序执行的事件,都被称为异常。
除了外部中断外,当有指令执行了“非法操作”,或者访问被禁的内存区间,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。
简单来说:异常包括外部中断和内核fault。
外部中断(IRQ):原本处于正常状态,突然有个外部因素干扰,然后马上处理干扰事项,解决好后又回到原来正常状态。
在中断产生后一般会去执行中断服务函数,实现特定任务。
无特殊说明,后面:异常就是中断,中断就是异常在编译时,每一个函数都有一个入口地址,该地址就是函数名。
尽管函数不是变量,但它在内存中仍有其物理地址,该地址能够赋给指针变量。
函数名相当于一个指向其函数入口指针常量。
函数名后面加圆括号,表示函数调用。
若要得到函数的地址,直接用函数名就可以了。
函数名就是一个地址,是存放该函数代码在存储器空间上的起始地址。
以一个子函数为例,编译器会分配一段内存空间用于存放改子函数代码内容,这段内存空间的起始地址是一个具体值,在程序里边就是函数名,当我们在程序其他位置调用该子函数时候,实际上就是让程序跳转到该函数名地址去运行子函数内容。
Cotrex-M4支持大量的中断,包括16‐5(保留功能)-1=10个系统异常,和最多240个外部中断。
当一个中断发生时候,并由CM4内核接受后,会执行对应的中断服务函数。
所以可以想象需要定义非常多的中断服务函数(而实际上并不需要很多,因为一般都只使能我们需要用到的中断)。
为方便CM4找到对应的中断函数入口,CM4使用了“向量表查表机制”这里使用一张向量表。
向量表其实是一个WORD(32位整数)数组,每个下标对应一种中断,该下标元素的值则是该中断服务函数的入口地址。
●#1~15(系统异常)在CortexM4中定义,IRQ#0~239(外部中断)中断由各个芯片商定义●向量表定义了中断的处理例程的入口地址。
缺省情况下,CM4认为向量表位于零地址处●响应中断时,CM4会根据中断号从表中找出对应的中断处理程序的入口地址●每个表项占用4字节●位置0x00000000处保存的是MSP的初始值异常类型表项地址偏移量异常向量00x00MSP的初始值10x04复位20x08NMI30x0C硬fault40x10MemManage fault50x14总线fault 60x18用法fault7‐100x1c‐0x28保留110x2c SVC120x30调试监视器130x34保留140x38PendSV 150x3c SysTick 160x40IRQ #0170x44IRQ #1中断向量表的跳转●支持10个Cortex-M4系统异常和82个可屏蔽外部中断●16个可编程优先级(使用了4位中断优先级)●包括内核异常在内的所有中断均通过NVIC进行管理。
stm32复位函数
stm32复位函数概述在开发stm32单片机应用程序时,复位函数是非常重要的一个功能。
复位函数可以将单片机恢复到初始状态,清除所有的寄存器状态和内存内容,以便重新开始程序的执行。
本文将详细介绍stm32上的复位函数及其相关知识。
复位的原理在stm32单片机中,可以通过外部复位和软件复位两种方式来实现复位功能。
外部复位是通过对复位引脚加上一个低电平来触发复位操作,而软件复位是通过特定的寄存器设置来触发复位操作。
STM32的复位函数stm32提供了一些复位函数用于进行单片机的复位操作,这些函数包括: 1. NVIC_SystemReset函数:该函数用于进行软件复位操作,会将系统状态寄存器和所有外设的寄存器恢复到复位状态。
2. HAL_RCC_DeInit函数:该函数用于将所有的外设和时钟配置恢复到复位状态。
3. HAL_NVIC_SystemReset函数:该函数用于重置NVIC的配置,将所有中断向量表的地址恢复到默认值。
4.HAL_NVIC_DeInit函数:该函数用于将所有中断的优先级和中断清除控制器的配置恢复到默认值。
复位函数的使用在使用复位函数之前,需要包含相应的头文件和进行一些初始化操作。
下面是一个示例代码:#include "stm32f4xx.h"#include "stm32f4xx_hal.h"int main(void){// 初始化操作...// 对单片机进行软件复位HAL_NVIC_SystemReset();// 恢复到此代码行时,单片机已经重启完成while(1){// 主程序循环}}在上面的示例代码中,首先通过包含头文件的方式引入需要使用的函数和类型定义。
然后进行一些初始化操作。
最后调用HAL_NVIC_SystemReset函数进行复位操作。
在复位操作完成后,程序将在while(1)循环中继续执行。
复位的注意事项在使用复位函数时,需要注意以下几点: 1. 复位函数调用后,程序将从头开始执行,因此在调用复位函数之后的代码将不再执行。
STM32 F1-F2-F4 比较
APB2
* 红色标注的外设为该系列所特有的 * 下划线标注的外设是所有系列共有,但内部映射位置发生变化 7
声明: 本演讲稿中若有与数据手册不相符合的内容,请以数据手册为准。
片上SRAM存储器比较
F4系列
内置SRAM 电池备份域SRAM 112K+64K+16K 4K 字节
F2系列
112K+16K
F1系列
STM32各系列比较:F1-F2-F4
STM32 – 领先的Cortex-M 产品家族
闪存容量 (字节)
STM32F407VG STM32F417VG STM32F407ZG STM32F417ZG STM32F405RG STM32F415RG STM32F405VG STM32F415VG STM32F405ZG STM32F415ZG STM32F407IG STM32F207IG STM32F417IG STM32F217IG
2个I2S
双12位DAC
多个12位快速ADC 主振荡器和32kHz振荡器 低速和高速RC振荡器 -40~+85º C和 -40~+105º C的工作温度 2.0~3.6V或 1.65~3.6V工作电压 5V容忍引脚 温度传感器
3相电机 定时器
CAN 2.0B
SDIO 2个I2S
CEC
STM32 L1系列:超低功耗型产品(STM32F151/152) 多达 多达 12K字节 Cortex-M3 USB 2.0 48K字节 384K字节 数据 32MHz 全速设备 SRAM Flash EEPROM
1024K
STM32F207VG STM32F217VG STM32F207ZG STM32F217ZG STM32F205RG STM32F215RG STM32F205VG STM32F215VG STM32F205ZG STM32F215ZG STM32F101RG STM32F103RG STM32F101VG STM32F103VG STM32F101ZG STM32F103ZG STM32F205RF STM32F205VF STM32F207VF STM32F205ZF STM32F101ZF STM32F207ZF STM32F103ZF
STM32F74xxx STM32F75xxx 硬件开发入门说明书
2
引脚复用映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3
时钟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18串行接口和 JTAG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.3 引脚排列和调试端口引脚 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.4 内部复位 ON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.5 内部复位 OFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 时钟安全系统 (CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4
启动配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
强大的STM32F4的定时器设定方法-附源码
STM32定时器比较多,使用起来也比较混乱。
windows下做过编程的人一定对SetTimer有印象,不过该定时器也不那么好用,因为id要自己维护,并且保证不跟程序中的其他id冲突。
手头上的项目要用到定时器,又不想每次都跑到寄存器里详细设定参数,所以就写了个类似SetTimer的定时器。
注:请在STM32F407上使用该定时器,其他内核需要修改,如M3内核是没有32位定时器的使用方法:u8 SetTimer(u32 unTime, u32 unCount, TIMERFUN pHandler,u32 ucPara)使用SetTimer去向系统申请一个定时器,如果成功,返回定时器ID,失败返回0.为了使定时器ID更有意义,这里设定返回值为定时器编号这里根据计时时间自动分配定时器。
比如你需要一个比较长时间的定时,那么SetTimer会给你分配一个32位定时器(M4内核)参数:unTime:计时时间(ms,如需ns请自行修改或者使用delay)unCount :计时器运行次数,0为无限运行,非零的话,运行unCount次后,该定时器关闭。
pHandler:定时器定时后执行的函数,该处如果不需要执行,可填0(什么都不需要做,干嘛要开启定时器?),当然这里可以自己定义函数指针类型(比如传2个参数或者变参:呃,变参太变态)ucPara:函数参数/*关闭定时器tmrId:定时器ID*/void KillTimer(TIMER tmrId);例如:view sourceprint?1 //每隔0.5s 反转4bit 灯2 tmrIrb = SetTimer(500, 0, IndRvsBit, 4);3 printf("IndRvsBit Timer Id: %d\r\n",tmrIrb);45 if(0 != tmrIrb)6 {7 ucCnt = SetTimer(10 * 1000, 1, KillBlink, tmrIrb); //10s 后关闭位4反转8 printf("KillBlink Timer Id: %d\r\n",ucCnt);9 }view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1这里要提前定义好参数里的函数指针view sourceprint?01 void KillBlink(u8 ucOpt)02 {03 // RTC_ShutWakeUp();04 KillTimer(ucOpt);05 printf("KillBlink(%d)\r\n", ucOpt);06 }0708 void AdPickTime(u8 ucOpt)09 {10 PushCmd(0xF2,0);11 }1213 void IndRvsBit(u8 ucOpt)14 {15 SubBoardIndSingle(4, acCurInd[4] ^ (1 << ucOpt));16 }header:view sourceprint?01 #ifndef __TIMER_H02 #define __TIMER_H03 #include "board.h"04 #include "zkekglobe.h"0 5 /////////////////////////////////////////////////////////////////// ///////////////60//All rights reserved708 //////////////////////////////////////////////////////////////////////////////////09101112 /*使能基本计时器13 ucTimerIdx:计时器编号 范围:2~5 9~1414 unCount 自动重装值。
STM32F4xxx 参考手册学习摘录
2存储器和总线架构64 KB CCM(内核耦合存储器)数据RAM 不属于总线矩阵,只能通过CPU 对其进行访问。
对APB 寄存器执行16 位或8 位访问时,该访问将转换为32 位访问:总线桥将16 位或8 位数据复制后提供给32 位向量。
存储器组织结构程序存储器、数据存储器、寄存器和I/O 端口排列在同一个顺序的 4 GB 地址空间内。
各字节按小端格式在存储器中编码。
字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。
嵌入式SRAMSTM32F405xx/07xx 和STM32F415xx/17xx 带有4 KB 备份SRAM(请参见第5.1.2 节:电池备份域)和192 KB 系统SRAM系统SRAM 分为三个块:●映射在地址0x2000 0000 的112 KB 和16 KB 块●映射在地址0x2002 0000 的64 KB 块,(适用于STM32F42xxx 和STM32F43xxx)。
AHB 主总线支持并发SRAM 访问(通过以太网或USB OTG HS):例如,当CPU 对112 KB 或64 KB SRAM 进行读/写操作时,以太网MAC 可以同时对16 KB SRAM 进行读/写操作。
●在地址0x1000 0000 映射的64 KB 块,只能供CPU 通过数据总线访问。
位段Cortex™-M4F 存储器映射包括两个位段区域。
这些区域将存储器别名区域中的每个字映射到存储器位段区域中的相应位。
在别名区域写入字时,相当于对位段区域的目标位执行读-修改-写操作。
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)BOOT0 为专用引脚,而BOOT1 则与GPIO 引脚共用。
一旦完成对BOOT1 的采样,相应GPIO 引脚即进入空闲状态,可用于其它用途。
器件退出待机模式时,还会对BOOT 引脚重新采样。
stm32f4 hal 复位指令
stm32f4 hal 复位指令
STM32F4系列芯片使用HAL库进行复位的指令是
`HAL_NVIC_SystemReset()`。
这个函数会重新初始化所有的外设并
将处理器复位到初始状态。
在调用这个函数之前,需要包含
`stm32f4xx_hal.h`头文件,并且需要确保已经初始化了HAL库。
除了使用HAL库的复位指令,还可以直接操作寄存器进行复位。
在STM32F4系列芯片中,可以通过设置特定的寄存器来实现复位。
例如,可以通过设置`SCB_AIRCR`寄存器的值来触发系统复位。
不过,直接操作寄存器需要对寄存器的操作非常熟悉,同时需要谨慎操作,以免造成系统不可预料的问题。
另外,还可以通过外部引脚来触发复位。
在STM32F4系列芯片中,通常会有一个复位引脚,当这个引脚被拉低时,系统会执行复
位操作。
这种方式通常用于外部硬件或者特定的应用场景下。
总的来说,STM32F4系列芯片可以通过HAL库的函数、直接操
作寄存器或者外部引脚来实现复位操作。
选择合适的方式取决于具
体的应用场景和需求。
希望以上信息能够帮助到你。
STM32F4 简介
3
声明: 本演讲稿中若有与数据手册不相符合的内容,请以数据手册为准。
STM32F4: 数字信号控制器
4
Cortex-M4内核
Cortex-M4
核心版本 指令系统 指令增强 流水线 v7ME Thumb® / Thumb-2 单周期的16、32位MAC 单周期的双16位MAC 8、16位SIMD计算 硬件除法(2~12周期) 硬件除法(2~12周期) 单周期 (32x32)乘法 支持饱和算术运算
1024K
STM32F207VG STM32F217VG STM32F207ZG STM32F217ZG STM32F205RG STM32F215RG STM32F205VG STM32F215VG STM32F205ZG STM32F215ZG STM32F101RG STM32F103RG STM32F101VG STM32F103VG STM32F101ZG STM32F103ZG STM32F205RF STM32F205VF STM32F207VF STM32F205ZF STM32F101ZF STM32F207ZF STM32F103ZF
512K
STM32F205RE STM32F215RE STM32F205VE STM32F215VE STM32F205ZE STM32F215ZE STM32F101RE STM32F101RD STM32F205RC STM32F101VE STM32F101VD STM32F101ZE STM32F101ZD STM32F207IC STM32F100RE STM32F103RE STM32F100VE STM32F103VE STM32F100ZE STM32F103VE
5
声明: 本演讲稿中若有与数据手册不相符合的内容,请以数据手册为准。
stm32关于复位类型的判断及软件复位bug
STM32 关于复位类型的判断及软件复位bugSTM 32在复位时,有严重BUG:1. 上电复位和外置的看门狗芯片重启复位是无法区分开来的!RCC_FLAG_BORRST, RCC_FLAG_PINRST, RCC_FLAG_LPWRRST三个都复位了!2. 这样当要在上电复位初始化关键代码时,这些代码看门狗复位则不用重启,这个关键代码会导致应用业务的异常!若两个中断分不开,导致系统异常看门狗复位时影响业务!/*RCC_FLAG_BORRST: POR/PDR or BOR reset//Power-on/power-down reset (POR/PDR reset) or brownout (BOR) resetRCC_FLAG_PINRST: Pin reset //NRST pin可能为看门狗重启RCC_FLAG_PORRST: POR/PDRresetRCC_FLAG_SFTRST: SoftwareresetRCC_FLAG_IWDGRST: Independent Watchdog resetRCC_FLAG_WWDGRST: Window Watchdog resetRCC_FLAG_LPWRRST: Low Powerreset*//********************************************************** ******************************* 函数名: SysRstSrcRecord 参数:无返回值: 系统重启次数记录描述:记录系统重启的方式记录作者:李少雄版本:V1.0 2012年11月12日****************************************************************** ************************/u8 SysRstSrcRecord(u8*pstRest){ //u8 uchInfoChange=0; pstRest[0] = RCC_GetFlagStatus(RCC_FLAG_BORRST);pstRest[1] = RCC_GetFlagStatus(RCC_FLAG_PINRST); pstRest[2] = RCC_GetFlagStatus(RCC_FLAG_PORRST); pstRest[3] = RCC_GetFlagStatus(RCC_FLAG_SFTRST); pstRest[4] = RCC_GetFlagStatus(RCC_FLAG_IWDGRST); pstRest[5] =RCC_GetFlagStatus(RCC_FLAG_WWDGRST);pstRest[6] =RCC_GetFlagStatus(RCC_FLAG_LPWRRST);}。
STM32 F1-F2-F4 比较
STM32F4通用定时器详细讲解
STM32F4通用定时器详细讲解STM32F4系列共有14个定时器,功能很强大。
14个定时器分别为:2个高级定时器:Timer1和Timer810个通用定时器:Timer2~timer5 和 timer9~timer142个基本定时器: timer6和timer7本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM 功能做彻底的探讨。
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1 主要功能是:1输入捕获——测量脉冲长度。
2 输出波形——PWM 输出和单脉冲输出。
Timer3有4个时钟源:1:内部时钟(CK_INT ),来自RCC 的TIMxCLK2:外部时钟模式1:外部输入TI1FP1与TI2FP23:外部时钟模式2:外部触发输入TIMx_ETR ,仅适用于TIM2、TIM3、TIM4,TIM3,对应着PD2引脚4:内部触发输入:一个定时器触发另一个定时器。
时钟源可以通过TIMx_SMCR 相关位进行设置。
这里我们使用内部时钟。
定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK ,故当APBx_Prescaler 不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK ,定时器时钟等于HCLK 。
例如:我们一般配置系统时钟SYSCLK 为168MHz ,内部高速时钟AHB=168Mhz ,APB1欲分频为4,(因为APB1最高时钟为42Mhz ),那么挂在APB1总线上的timer3时钟为84Mhz 。
《STM32F4xx 中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个,以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。
1 TIM3 控制寄存器 1 (TIM3_CR1)SYSCLK(最高AHB_Prescaler APBx_Prescaler作用:1使能自动重载TIM3_ARR2定时器的计数器递增或递减计数。
第二章实验平台硬件资源详解-正点原子探索者STM32F4开发板STM32F4开发指南
第⼆章实验平台硬件资源详解-正点原⼦探索者STM32F4开发板STM32F4开发指南第⼆章实验平台硬件资源详解本章,我们将节将向⼤家详细介绍ALIENTEK探索者STM32F4开发板各部分的硬件原理图,让⼤家对该开发板的各部分硬件原理有个深⼊理解,并向⼤家介绍开发板的使⽤注意事项,为后⾯的学习做好准备。
本章将分为如下两节:1.1,开发板原理图详解;1.2,开发板使⽤注意事项;2.1 开发板原理图详解2.1.1 MCUALIENTEK探索者STM32F4开发板选择的是STM32F407ZGT6作为MCU,该芯⽚是STM32F407⾥⾯配置⾮常强⼤的了,它拥有的资源包括:集成FPU和DSP指令,并具有192KB SRAM、1024KB FLASH、12个16位定时器、2个32位定时器、2个DMA控制器(共16个通道)、3个SPI、2个全双⼯I2S、3个IIC、6个串⼝、2个USB(⽀持HOST /SLAVE)、2个CAN、3个12位ADC、2个12位DAC、1个RTC(带⽇历功能)、1个SDIO接⼝、1个FSMC 接⼝、1个10/100M以太⽹MAC控制器、1个摄像头接⼝、1个硬件随机数⽣成器、以及112个通⽤IO⼝等。
该芯⽚的配置⼗分强悍,很多功能相对STM32F1来说进⾏了重⼤改进,⽐如FSMC的速度,F4刷屏速度可达3300W像素/秒,⽽F1的速度则只有500W左右。
MCU部分的原理图如图2.1.1.1(因为原理图⽐较⼤,缩⼩下来可能有点看不清,请⼤家打开开发板光盘的原理图进⾏查看)所⽰:图2.1.1.1 MCU部分原理图上图中U4为我们的主芯⽚:STM32F407ZGT6。
这⾥主要讲解以下3个地⽅:1,后备区域供电脚VBA T脚的供电采⽤CR1220纽扣电池和VCC3.3混合供电的⽅式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,⽽在外部电源断开的时候,则由CR1220给其供电。
第四章 STM32F4开发基础知识入门-正点原子探索者STM32F4开发板-STM32F4开发指南-库函数
第四章STM32F4开发基础知识入门这一章,我们将着重STM32开发的一些基础知识,让大家对STM32开发有一个初步的了解,为后面STM32的学习做一个铺垫,方便后面的学习。
这一章的内容大家第一次看的时候可以只了解一个大概,后面需要用到这方面的知识的时候再回过头来仔细看看。
这章我们分7个小结,·4.1 MDK下C语言基础复习·4.2 STM32F4系统架构·4.3 STM32F4时钟系统·4.4 IO引脚复用器和映射·4.5 STM32F4 NVIC中断优先级管理·4.6 MDK中寄存器地址名称映射分析·4.7 MDK固件库快速开发技巧4.1 MDK下C语言基础复习这一节我们主要讲解一下C语言基础知识。
C语言知识博大精深,也不是我们三言两语能讲解清楚,同时我们相信学STM32F4这种级别MCU的用户,C语言基础应该都是没问题的。
我们这里主要是简单的复习一下几个C语言基础知识点,引导那些C语言基础知识不是很扎实的用户能够快速开发STM32程序。
同时希望这些用户能够多去复习一下C语言基础知识,C语言毕竟是单片机开发中的必备基础知识。
对于C语言基础比较扎实的用户,这部分知识可以忽略不看。
4.1.1 位操作C语言位操作相信学过C语言的人都不陌生了,简而言之,就是对基本类型变量可以在位级别进行操作。
这节的内容很多朋友都应该很熟练了,我这里也就点到为止,不深入探讨。
下面我们先讲解几种位操作符,然后讲解位操作使用技巧。
C表4.1.1 16种位操作这些与或非,取反,异或,右移,左移这些到底怎么回事,这里我们就不多做详细,相信大家学C语言的时候都学习过了。
如果不懂的话,可以百度一下,非常多的知识讲解这些操作符。
下面我们想着重讲解位操作在单片机开发中的一些实用技巧。
1)不改变其他位的值的状况下,对某几个位进行设值。
这个场景单片机开发中经常使用,方法就是先对需要设置的位用&操作符进行清零操作,然后用|操作符设值。
如何判断STM32的复位类型
STM 32 在复位时,有严重 BUG: 1.上电复位和外置的看门狗芯片重启复位是无法区分开来的! RCC_FLAG_BORRST, RCC_FLAG_PINRST, RCC_FLAG_LPWRRST 三 个都复位了! 2.这样当要在上电复位初始化关键代码时,这些代码看门狗复位则不 用重启,这个关键代码会导致应用业务的异常!若两个中断分不开,导致系 统异常看门狗复位时影响业务! /* RCC_FLAG_BORRST: POR/PDR or BOR reset //Power-on/powerdown reset (POR/PDR reset) or brownout (BOR) reset RCC_FLAG_PINRST: Pin reset //NRST pin 可能为看门狗重启
RCC_FLAG_PORRST: POR/PDR reset RCC_FLAG_SFTRST: Software reset RCC_FLAG_IWDGRST: Independent Watchdog reset RCC_FLAG_WWDGRST: Window Watchdog reset RCC_FLAG_LPWRRST: Low Power reset */ /****************************************************************** *********************** 函 数 名: SysRstSrcRecord
{ //u8 uchInfoChange=0; pstRest[0] = RCC_GetFlagStatus(RCC_FLAG_BORRST); pstRest[1] = RCC_GetFlagStatus(RCC_FLAG_PINRST); pstRest[2] = RCC_GetFlagStatus(RCC_FLAG_PORRST); pstRest[3] = RCC_GetFlagStatus(RCC_FLAG_SFTRST); pstRest[4] = RCC_GetFlagStatus(RCC_FLAG_IWDGRST); pstRest[5] = RCC_GetFlagStatus(RCC_FLAG_WWDGRST); pstRest[6] = RCC_GetFlagStatus(RCC_FLAG_LPWRRST);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32F7与STM32F4复位序列比较
前言
初次接触到STM32F7,总会有个疑惑,为什么0地址变成了ITCM RAM的起始地址。
系统复位还是从地址0处开始执行吗?如果是,那这似乎看起来是冲突的。
实际上,STM32F7基于Cortex-M7内核,Cortex-M7和Cortex-M3/M4的复位序列有了一些不一样。
在本文中,将针对这个问题做详细讲解。
STM32F4的复位序列
STM32F4基于Cortex-M4。
对于基于Cortex-M3/M4的芯片,复位后总是从0x00000000地址处,取主堆栈指针(MSP)的值,从0x00000004处,取出PC的初始值(这个值是复位向量),然后从这个值对应的地址处取指。
这两个值,就是中断向量表里的第一个和第二个表项的值。
VTOR寄存器的值,重定位中断向量表。
在IAP的应用中,我们会遇到这种情况,如下图:
上电复位,先执行IAP程序。
此时用到的是位于0地址处的IAP程序的向量表(虽然图中说此时VTOR的值等于
0x08000000,实际上,因为ST提供了存储器地址重映射的功能,通过boot引脚的配置,已经将0x08000000处的存储空间重映射到了地址0处,所以0x08000000和地址0x00000000处开始的存储空间是同一块物理空间,其内容当然也是一样的。
所以不用修改VTOR的值,VTOR=0也是一样的)。
言归正传,上电后,先从IAP复位中断程序开始执行IAP程序,执行完IAP程序后,需要跳转到用户程序,这时就需要将向量表重定位到用户程序的向量表位置(修改VTOR寄存器的值到用户向量表的起始地址)。
这是M3/M4的情况,STM32F7之前的所有芯片都是一样的。
STM32F7的复位序列
前面讲的那些情况,现在在STM32F7中有些不一样了。
在ARM Cortex-M7的Generic User Guide中,有一段如下描述:“On system reset, the vector table is at the address configured at implementation, typically 0x00000000. ”从这段话,我们可以看出,在M7中,复位后向量表的位置不是固定在地址0处,而是可以由各个芯片厂商自己定义。
对于STM32F7来说,它是由BOOT_ADD0[15:0]和BOOT_ADD1[15:0]这两个option bytes决定的。
Boot 脚 = 0时,由BOOT_ADD0 [15:0] 的值决定,ST默认值为0x0020 0000。
这是ITCM-FLASH的起始地址(通过ART 加速器,访问FLASH);
Boot 脚 = 1时,由BOOT_ADD1 [15:0] 的值决定,ST默认值为0x0010 0000。
这是系统Bootloader的起始地址。
* 如果对BOOT_ADDx写入的地址值超出了存储器映射的范围或者到了保留地址空间,系统将自动转为下面的值:
BOOT_ADD0 = 0x0020 0000;
BOOT_ADD1 = 0x0000 0000(和出厂时ST默认的值0x0010 0000不一样)
也就是说,只要你配置好了boot address, ST的硬件会自动修改向量表的偏移地址寄存器VTOR,使之与boot address相匹配。
不需要再通过软件修改VTOR寄存器。
回到本文开始的那个问题。
所以对于STM32F7来说,默认状态下,复位后它并不是从0地址从开始执行,而是从0x0020 0000 或者0x0010 0000开始执行,所以与ITCM-RAM从0地址处开始并不冲突。
如果你非要将向量表放在0地址开始的位置(修改VTOR寄存器),也不是不可以。
只是这是,如果你还要在ITCM-RAM里面跑别的程序的话,就要注意向量表不要与其他程序的地址重叠了。
重要通知 - 请仔细阅读
意法半导体公司及其子公司(“ST”)保留随时对ST 产品和/ 或本文档进行变更、更正、增强、修改和改进的权利,恕不另行通知。
买方在订货之前应获取关于ST 产品的最新信息。
ST 产品的销售依照订单确认时的相关ST 销售条款。
买方自行负责对ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。
ST 不对任何知识产权进行任何明示或默示的授权或许可。
转售的ST 产品如有不同于此处提供的信息的规定,将导致ST 针对该产品授予的任何保证失效。
ST 和ST 徽标是ST 的商标。
所有其他产品或服务名称均为其各自所有者的财产。
本文档中的信息取代本文档所有早期版本中提供的信息。
© 2015 STMicroelectronics - 保留所有权利。