stm832详解.docx
- 文档编号:10357359
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:16
- 大小:23.04KB
stm832详解.docx
《stm832详解.docx》由会员分享,可在线阅读,更多相关《stm832详解.docx(16页珍藏版)》请在冰豆网上搜索。
stm832详解
sTm8,32详解
默认分类2011-01-0809:
32:
04阅读30评论0 字号:
大中小 订阅
先将ST最近一次研讨会上讲的一些应用实例编入,该文档可点击下载(文件大小:
(原文件名:
STM32F10x常见应用解析.pdf)
对于论坛中提供代码的酷帖,大部分由于没有多少说明,且不是针对某一类问题的解答,基本只是会在楼下的楼下列出清单,而不会再对其专门组织整理。
按照使用外设模块
======================================================================
============================== GPIO/AFIO =============================
1、GPIO的推动能力
================================ Backup ==============================
========================== Reset/Clock Control =======================
1、时钟安全系统(CSS)
时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。
操作流程:
1)、启动时钟安全系统CSS:
RCC_ClockSecuritySystemCmd(ENABLE); (NMI中断是不可屏蔽的!
)
2)外部振荡器失效时,产生NMI中断,对应的中断程序:
void NMIException(void)
{
if (RCC_GetITStatus(RCC_IT_CSS) !
= RESET)
{
操作流程:
1)、设置为复用Push-Pull模式。
= GPIO_Pin_8;
= GPIO_Speed_50MHz;
= GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
2)、选择输出时钟源。
时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO[2:
0]位控制。
RCC_MCOConfig(RCC_MCO);
参数RCC_MCO为要输出的内部时钟:
RCC_MCO_NoClock --- 无时钟输出
RCC_MCO_SYSCLK --- 输出系统时钟(SysCLK)
RCC_MCO_HSI --- 输出内部高速8MHz的RC振荡器的时钟(HSI)
RCC_MCO_HSE --- 输出高速外部时钟信号(HSE)
RCC_MCO_PLLCLK_Div2 --- 输出PLL倍频后的二分频时钟(PLLCLK/2)
注:
由于STM32 GPIO输出管脚的最大响应频率为50MHz,如果输出频率超过50MHz,则输出的波形会失真。
4、可编程电压监测器(PVD)
STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。
通过电源控制寄存器中的PLS[2:
0]位可以用来设定监控电压的阀值,通过对外部电压进行比较来监控电源。
当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:
对系统的一些数据保存起来,同时对外设进行相应的保护操作。
操作流程:
1)、系统启动后启动PVD,并开启相应的中断。
PWR_PVDLevelConfig(PWR_PVDLevel_2V8); ....
位置58 - DMA2_Channel3 = DMA2 Channel3 global interrupt
位置59 - DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts
2)、系统控制寄存器组
STM32的固件库中有如下定义:
typedef struct
{
vuc32 CPUID;
vu32 ICSR;
vu32 VTOR;
vu32 AIRCR;
vu32 SCR;
vu32 CCR;
vu32 SHPR[3];
vu32 SHCSR;
vu32 CFSR;
vu32 HFSR;
vu32 DFSR;
vu32 MMFAR;
vu32 BFAR;
vu32 AFSR;
} SCB_TypeDef; /* System Control Block Structure */
它们对应ARM手册中的名称为
CPUID = CPUID Base Register
ICSR = Interrupt Control State Register
VTOR = Vector Table Offset Register
AIRCR = Application Interrupt/Reset Control Register
SCR = System Control Register
CCR = Configuration Control Register
SHPR = System Handlers Priority Register
SHCSR = System Handler Control and State Register
CFSR = Configurable Fault Status Registers
HFSR = Hard Fault Status Register
DFSR = Debug Fault Status Register
MMFAR = Mem Manage Address Register
BFAR = Bus Fault Address Register
AFSR = Auxiliary Fault Status Register
3)、系统时钟寄存器组
STM32的固件库中有如下定义:
typedef struct
{
vu32 CTRL;
vu32 LOAD;
vu32 VAL;
vuc32 CALIB;
} SysTick_TypeDef;
它们对应ARM手册中的名称为
CTRL = SysTick Control and Status Register
LOAD = SysTick Reload Value Register
VAL = SysTick Current Value Register
CALIB = SysTick Calibration Value Register
================================= DMA ================================
1、DMA普通模式和循环模式的区别
循环模式:
用于处理一个环形的缓冲区,每轮传输结束时数据传输 的配置会自动地更新为初始状态,DMA传输会连续不断地进行。
普通模式:
在DMA传输结束时,DMA通道被自动关闭,进一步的 DMA请求将不被满足。
2、DMA传输需要指定的条件:
传输源:
DMA控制器从传输源读出数据;
传输目标:
DMA控制器将数据传输的目标;
触发信号:
用于触发一次数据传输的动作,执行一个单位的传输源至传输目标的数据传输。
可以用来控制传输的启动条件。
================================= ADC ================================
1、STM32的内部温度传感器
STM32内部温度传感器与ADC的通道16相连,与ADC配 合使用实现温度测量。
测量范围–40~125℃,精度 ± 1.5℃
操作流程:
1)、设置ADC相关参数
25℃
================================= DAC ================================
============================= Advanced Timer =========================
============================== General Timer =========================
================================ Base Timer ==========================
============================= Real-Time Clock ========================
=========================== Independent watchdog =====================
============================= Windows Watchdog =======================
================================== FSMC ==============================
================================== SDIO ==============================
================================== USB ===============================
1、STM32的USB中断说明
STM32的USB模块可产生三种中断:
USB唤醒中断、USB高优先级中断和USB低优先级中断,这三种中断对应事件如下:
1)、USB唤醒中断 - 在中断向量表中的位置是42
这个中断在USB设备从暂停模式唤醒时产生,唤醒事件由USB_ISTR寄存器的WKUP位标识。
2)、USB高优先级中断 - 在中断向量表中的位置是19
这个中断仅由USB同步(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正确传输事件由USB_ISTR寄存器的CTR位标识。
3)、USB低优先级中断 - 在中断向量表中的位置是20
这个中断由所有其它的USB事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB复位等,事件标志位在USB_ISTR寄存器中。
在STM提供的STM32 USB 开发包中的例程包含了上述三种中断的处理方法。
例如在USB Speaker例程中,CTR_HP函数处理USB高优先级中断;在所有例子中都有USB_Istr()函数处理USB低优先级中断。
================================= bxCAN ==============================
1、CAN波特率的设定计数
================================ Etherne ==============================
================================== SPI ===============================
1、SPI外设的NSS引脚设置为通用IO口
由于SPI外设的SPI_CR1寄存器中SSM置1时,NSS引脚可被被释放用于GPIO使用,因此无论是在SPI的主模式或是从模式下均可以将NSS引脚释放,由软件或硬件进行NSS管理;
操作流程:
1)、初始化SPI外设,设置NSS由软件管理:
= SPI_NSS_Soft;
2)、如果NSS引脚用于其他外设时,需要使能NSS输出:
SPI_SSOutputCmd(SPIx, ENABLE);
2、SPI 单线传输
此模式下限制:
只能用作输入或者输出,或者工作在半双工模式下。
================================== I2C ===============================
================================= USART ==============================
============================ Device Signature ========================
1、 STM32F10xxx系列MCU内部含有一个出厂被固化的96bit唯一识别ID,该ID可以用于芯片加密、设备识别等一类特殊应用。
读取该ID的方法:
u32 DevID[3];
DevID[0] = *(vu32*)(0x1ffff7e8);
DevID[1] = *(vu32*)(0x1ffff7ec);
DevID[2] = *(vu32*)(0x1ffff7f0);
数组DevID[3]中即保存了MCU的ID。
注:
256K Flash或以上容量的STM32,仅“Z”版本才有,之前的“A”版本没有。
2、
================================== I2C ===============================
================================= Flash ==============================
1、STM32对内部Flash的保护措施
所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。
1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。
一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:
通过调试器(JTAG或SWD);
从RAM中启动并执行的程序;
2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。
读与写设置的效果见下表:
读保护 写保护 对Flash的操作功能
有效 有效 CPU只能读,禁止调试和非法访问。
有效 无效 CPU可以读写,禁止调试和非法访问,页0~3为写保护。
无效 有效 CPU可读,允许调试和非法访问。
无效 无效 CPU可以读写,允许调试和非法访问。
2、当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:
1)、调试执行程序时;
2)、从RAM启动并执行程序时
STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码。
3、Flash保护相关函数
FLASH_Unlock(); 04C04c9A
ex
4)、Options->Linker->Output->Output File->Format->Other 选项前的钩选上并把Output格式改为intel-extended
经过以上设置,在Rebuld All之后会在\Debug\Exe下生成.hex格式目标文件
3、IAR编译输出BIN格式的目标文件
1)、Options->C/C++ Compiler->Output->Generate debug information 选项前的钩去掉
2)、Options->Assembler->Output->Generate debug information 选项前的钩去掉
3)、Options->Linker->Output->Output File->Override default 选项前的钩选上并把文件名的后缀改成.bin
4)、Options->Linker->Output->Output File->Format->Other 选项前的钩选上并把Output格式改为row-binary
经过以上设置,在Rebuld All之后会在\Debug\Exe下生成.bin格式目标文件
================================== MDK ===============================
1、在MDK代码编辑环境下不能使用Goto Definition(用于查找某个变量的类型及定义)、Goto Reference(用于查找某个函数申明的原型)功能
解决:
打开Project->Target-Options->Output,将Browse Information复选框勾上。
2、当使用STM32固件库与RTX Kernel时,使用isr_evt_set(),事件无响应
解决:
编辑STM32固件库的“32f”文件:
...
IMPORT SVC_Handler ;name changed according to RTX usage
IMPORT DebugMonitor
IMPORT PendSV_Handler ;修改加入
IMPORT SysTick_Handler ;name changed according to RTX usage
...
DCD SVC_Handler
DCD DebugMonitor
DCD 0 ; Reserved
DCD PendSV_Handler ;修改加入
DCD SysTick_Handler
3、
======================================================================
本贴被Grant编辑过,最后修改时间:
2009-08-19,01:
14:
11.
2008-09-29,18:
37:
47
资料
邮件
回复
引用回复 ↑↑ ↓↓
编辑
删除
【1楼】Grant
积分:
2419
派别:
等级:
------
来自
STM8S使用常用问题汇总
==================================================================
按外设模块
======================================================================
============================== GPIO/AFIO =============================
=============================== Beep =================================
1、STM8S提供一个Beep引脚。
通过简单的配置即可输出1K、2K、4K三种频率信号驱动外部蜂鸣器。
由于默认情况下Beep输出引脚PD4为TIM2_CC1功能,为此我们需要打开“Option Bytes”的AFR7选项。
打开STVP,选择你使用的MCU型号,找到"Option Bytes"标签。
将AFR7改为"Port D4 Alternate Function = Beep"。
菜单栏选择"Program" -> "Current tab",成功后,即可正常使用Beep输出功能。
==================================================================
=============================== Power/RESET =========================
1、STM8S为双电源MCU,外设工作电压为3V~,内核工作电压为。
因MCU内部已集成 低功耗电压(LPVR)调节器,MCU工作仅需提供一个供电电源。
在电源电路设计时,需要注意芯片VCAP引脚上要提供滤波电容,该电容用于对内部供电滤波,容值不小于470nF为宜,瓷片和Ta电容均可,尽量选择较低ESR(等效串联电阻值)的型号。
2、MCU芯片自带上电复位(POR)与掉电复位(BOR),工作时供电需注意POR、BOR工作范围。
1)、POR - Power-On Reset 上电复位
POR的功能是在VDD电压由低向高上升越过规定的阀值(VIT+)之前,保持芯片复位,当越过这个阀值(VIT+)后的一小段时间后(Reset temporization),结束复位开始取复位向量执行指令。
2)、BOR - Brown-Out Reset 掉电复位
BOR的功能是在VDD电压由高向低下降越过规定的阀值(VIT-)后,将在芯片内部产生复位。
3、芯片复位地址指向0x6000(内部Bootloader存放首地址),在检查无Boot操作,PC指向0x8080地址。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm832 详解