ADC、RTC和看门狗定时器
- 格式:ppt
- 大小:280.00 KB
- 文档页数:33


STM32独立看门狗和低功耗模式_RTC定时唤醒来喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。
其中独立看门狗的时钟由独立的RC振荡器(STM32F10x 一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。
而且独立看门狗一旦启动,除了系统复位,它不能再被停止。
但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。
那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用?
一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。
比如看门狗复位的时间间隔为10s。
那么在进入休眠模式前设置RTC闹钟中断时间为5s。
这样每隔5s唤醒一次喂一次狗。
便可以很好的解决这个问题。
while(1)
{
// 执行任务
Task1();
Task2();
// ..
// 喂狗
dev_iwdg_feed();
// 进入待机模式开关
if(m_bEnterStandByMode)
{
// 使能外部中断,GPIOB3,用以MCU从待机模式唤醒
dev_exTI_enable(TRUE);
ENTERSTOPMODE:
// 设置RTC闹钟,5秒钟产生一次RTC闹钟中断*/
dev_rtc_setAlarm(5);。
ARM®Cortex TM-M032位微处理器SWM20P系列MCU数据手册华芯微特科技有限公司Synwit Technology Co., Ltd.目录相关文档 (7)缩写表 (7)寄存器描述列表缩写约定 (7)文档下载地址 (7)1概述 (8)2特性 (9)3选型指南 (12)4功能方框图 (13)5管脚配置 (14)5.1SWM20PG6S6 (14)5.2管脚定义 (15)5.3管脚复用功能 (18)6功能描述 (20)6.1存储器映射 (20)6.2中断控制器(NVIC) (21)6.3系统定时器(SYSTIC) (36)6.4系统控制器 (43)6.5系统管理(SYSCON) (53)6.6端口控制模块(PORTCON) (103)6.7通用I/O (GPIO) (142)6.8加强型定时器(TIMER) (164)6.9基础定时器(BTIMER) (192)6.10正交编码器(QEI) (203)6.11看门狗定时器(WDT) (218)6.12实时时钟(RTC) (230)6.13UART接口控制器(UART) (251)6.14I2C总线控制器(I2C) (272)6.15SPI总线控制器(SPI) (298)6.16脉冲宽度调制(PWM)发生器 (323)6.17预驱电路(GATE DRIVER) (379)6.18模拟数字转换器(SAR ADC) (383)6.19旋转坐标计算(CORDIC) (415)6.20除法器(DIV) (426)6.21FLASH控制器与ISP操作 (437)6.22比较器(CMP) (450)6.23放大器(OPA) (462)7典型应用电路 (471)8电气特性 (472)8.1绝对最大额定值 (472)8.2DC电气特性 (473)8.3AC电气特性 (474)8.4模拟器件特性 (478)8.5DRIVER特性 (486)9封装尺寸 (488)9.1SSOP28 (488)10版本记录 (489)图目录图4-1功能方框图 (13)图5-1 20PG6S6封装管脚配置图 (14)图6-1 systic模块结构图 (37)图6-2 SysTick计数时序图 (38)图6-3时钟结构框图 (54)图6-4端口唤醒示意图 (58)图6-5 PORTCON模块结构框图 (104)图6-6 引脚配置示意图 (105)图6-7 IO输入上拉下拉 (106)图6-8 推挽输出 (106)图6-9 开漏输出 (107)图6-10 TIMER 模块结构框图 (165)图6-11定时器工作示意图 (166)图6-12计数器工作示意图 (167)图6-13级联模式工作示意图 (168)图6-14 脉冲发送示意图 (169)图6-15 输出脉冲比较点1等于周期脉冲发送示意图 (169)图6-16单次高电平捕捉示意图 (170)图6-17单次低电平捕捉示意图 (170)图6-18 HALL记录值 (171)图6-19 HALL对应关系图 (172)图6-20 BTIMER 模块结构框图 (193)图6-21定时器工作示意图 (194)图6-22定时器RELOAD工作示意图 (195)图6-23 QEI模块结构框图 (204)图6-24 增量式正交编码盘示意图 (205)图6-25 三相信号正向/反向旋转时序关系 (205)图6-26 QEI计数器索引复位模式 (206)图6-27 计数匹配复位模式 (206)图6-28 正交编码器x4计数模式示意图 (207)图6-29 正交编码器x2计数模式示意图 (207)图6-30 WDT模块结构框图 (219)图6-31 普通模式WDT工作示意图 (220)图6-32 WDT配置为RESET模式波形图 (221)图6-33 WDT配置为中断模式波形图 (221)图6-34 窗口模式看门狗发生中断及复位与计数值之间的关系示意图 (221)图6-35 RTC模块结构框图 (231)图6-36 UART模块结构图 (252)图6-37 UART字符格式 (253)图6-38 自动波特率示意图 (254)图6-39 LIN Fram示意图 (256)图6-40 Break信号不够长示意图 (257)图6-41 Break信号恰好够长示意图 (257)图6-42 Break信号足够长示意图 (257)图6-43硬件流控 (258)图6-44 对方发送8个数据接收FIFO示意图 (259)图6-45 对方发送9个数据接收FIFO示意图 (259)图6-46 发送FIFO示意图 (260)图6-47 I2C模块结构框图 (273)图6-48 I2C通信示意图 (274)图6-49 Master SCL周期配置示意图 (275)图6-50 Master 寄存器时序示意图 (277)图6-51 Slave 寄存器时序示意图 (279)图6-52 SPI模块结构框图 (299)图6-53 SPI模式波形图 (300)图6-54 SSI模式单次输出波 (301)图6-55 SSI模式连续输出波形 (301)图6-56主机模式接口框图 (302)图6-57从机模式接口框图 (302)图6-58 philips数据格式 (302)图6-59 MSB对齐数据格式 (303)图6-60 PCM短帧数据格式 (303)图6-61 PCM 长帧数据格式(PCMSYNW = 0) (304)图6-62 PCM 长帧数据格式(PCMSYNW = 1) (304)图6-63 SPIFLASH四线读帧格式 (304)图6-64 SPIFALSH四线模式外部连接图 (304)图6-65 PWM模块结构框图 (324)图6-66 PWM死区示意图 (325)图6-67 边沿对齐模式下向上计数时计数器启动与停止波形 (326)图6-68 边沿对齐模式下向下计数时计数器启动与停止波形 (327)图6-69 中心对齐模式下计数器启动与停止波形 (328)图6-70 非对称中心对齐模式下计数器启动与停止波形 (328)图6-71 边沿对齐模式下计数器计数过程波形 (329)图6-72 中心对称模式下计数器计数过程波形 (329)图6-73 硬件刹车控制和软件刹车控制计数器计数情况 (330)图6-74 计数器重载波形 (331)图6-75 边沿对齐模式下PWM信号产生波形 (332)图6-76 中心对齐模式下PWM信号产生波形 (332)图6-77 非对称中心对齐模式下PWM信号产生波形 (333)图6-78 BRK中心对齐模式下PWM信号产生波形 (333)图6-79 TRIGGER控制波形 (334)图6-80 重复计数功能波形图 (335)图6-81 PWM触发ADC采样示意图 (335)图6-82 电平翻转示意图 (336)图6-83 挖坑前波形 (337)图6-84 挖坑后波形 (337)图6-85 预驱电路结构框图 (380)图6-86 参考应用电路图 (382)图6-87 ADC模块结构框图 (384)图6-88 ADC时钟示意图 (385)图6-89 中心对称模式下PWM触发ADC采样示意图 (386)图6-90 SAR ADC连续采样示意图 (387)图6-91 SAR ADC多通道连续采样示意图 (388)图6-92比较器框图 (451)图6-93 比较器迟滞功能示意图 (453)图6-94 HALL对应关系图 (453)图6-95 P端分压模式结构示意图 (454)图6-96 P端分压模式结构图 (454)图6-97放大器框图 (463)图6-98典型放大电路 (464)图6-99 PGA内部结构图 (465)图6-100 PGA应用参考图 (466)图7-1典型应用电路图 (471)图8-1 上电复位时间示意图 (477)图9-1 SSOP28封装尺寸图 (488)表格目录表格3-1 SWM20P系列MCU选型表 (12)表格5-1 PA复用功能 (18)表格5-2 PB复用功能 (18)表格5-3 PM复用功能 (19)表格6-1存储器映射 (20)表格6-2中断编号及对应外设 (22)表格8-1绝对最大额定值 (472)表格8-2 DC电气特性(Vdd-Vss = 5.0V, Tw =25℃)) (473)表格8-3内部振荡器特征值 (474)表格8-4外部4-32MHZ晶体振荡器 (475)表格8-5外部振荡器典型电路 (476)表格8-6 SAR ADC特征值 (478)表格8-7放大器特征值 (479)表格8-8比较器特征值 (480)表格8-9LDO特征值 (481)表格8-10 绝对最大额定值 (486)表格8-11 绝对最大额定值 (486)表格8-12 绝对最大额定值 (486)表格8-13 动态电特性值 (487)相关文档缩写表寄存器描述列表缩写约定文档下载地址/support-1/3.html1概述SWM20P系列32位MCU(以下简称SWM20P)内嵌ARM® CortexTM-M0内核,凭借其出色的性能以及高可靠性、低功耗、代码密度大等突出特点,可应用于工业控制、电机控制、白色家电等多种领域。
一、基础_实验【10个】1、入门试验:LED闪烁(1个)2、时钟实验:设置MCLK、ACLK、SMCLK(1个)3、低功耗实验:设置低功耗模式(1个)4、IO端口试验:IO端口寄存器设置(1个)5、定时器:看门狗定时器、TimerA寄存器设置(2个)6、比较器:比较器A寄存器(1个)7、Flash:flash读写(1个)8、异步通信:异步通信寄存器设置(1个)9、ADC:ADC12寄存器设置(1个)二、开发板模块简单程序【56个】1、LED流水灯实验(红、黄、绿)(1)LED1:检测开发板(2)LED2:普通IO控制闪烁(3)LED3:PWM信号控制闪烁2、蜂鸣器实验(1)蜂鸣器1:单频音(步进变音调)(2)蜂鸣器2:奏乐(祝你平安)3、数码管实验(1)数码管1(显示123456)(2)数码管2(动态显示0~F)(3)数码管3(流动光圈)(4)数码管4(来回光标)4、4×1独立按键实验(1)4×1键盘1:扫描数码管显示(2)4×1键盘2:中断数码管显示(3)4×1键盘3:控制LED(4)4×1键盘4:控制蜂鸣器5、4×4矩阵键盘实验(1)4×4键盘1:行列扫描数码管显示(2)4×4键盘2:行列扫描1602液晶显示(3)4×4键盘3:控制LED蜂鸣器6、1602液晶实验(1)1602液晶1:动态字符显示(2)1602液晶2:静态字符显示(3)1602液晶3:内部时钟显示7、3.3V-5V电平转换实验(1)电平转换1:输出5V方波(2)电平转换2:输出不同占空比的方波(3)电平转换3:MCLK,SMCLK,ACLK8、RS232接口实验(1)RS232接口1:MCU发送数据PC机显示(2)RS232接口2:按键控制MCU发送数据PC机显示(3)RS232接口3:PC机发送数据MCU液晶显示(4)RS232接口4:MCU回发接收到的PC机数据(5)RS232接口5:RS232控制蜂鸣器9、RS485接口实验(1)RS485接口1:发送程序(2)RS485接口2:接收程序10、USB接口实验(1)USB接口1:简单连接测试(2)USB接口2:USB接收数据(3)USB接口3:USB发送数据11、PS2接口实验(1)PS2接口1:PS2控制1602显示(2)PS2接口2:PS2控制数码管显示(3)PS2接口3:PS2控制LED和蜂鸣器12、12-Bit高精度温度传感器实验(1)温度传感器1:DS18B20在数码管显示(2)温度传感器2:DS18B20在液晶显示13、RTC实时时钟实验(1)实时时钟1:DS1302测试(2)实时时钟2:DS1302电子钟14、2k Bit EEPROM实验(1)EEPROM1:AT24C02测试(2)EEPROM2:读出数据通过串口在PC机显示15、12-Bit模数转换器(ADC)接口实验(1)模数转换器1:ADC在数码管显示(2)模数转换器2:ADC在1602液晶在显示(3)模数转换器3:ADC通过串口在PC机显示16、8-Bit数模转换器(DAC)实验(1)数模转换器1:DAC控制LED(2)数模转换器2:DAC输出电压,ADC采样转换并在液晶上显示17、12864液晶实验(与12864液晶配套)(1)12864液晶并口1:字符显示(2)12864液晶并口2:汉字显示(3)12864液晶并口3:图形显示(4)12864液晶并口4:综合演示(5)12864液晶串口5:字符显示(6)12864液晶串口6:汉字显示(7)12864液晶串口7:图形显示(8)12864液晶串口8:综合演示18、射频模块CC1000实验(1)射频模块1:发送数据(2)射频模块2:接收数据19、ucos移植注:17、18程序随模块赠送三、开发板综合程序【30】1、键盘综合实验(1)4×4键盘+蜂鸣器+LED+数码管显示(2)4×4键盘+蜂鸣器+LED+1602液晶显示(3)4×4键盘+蜂鸣器+LED+PC机显示(4)PS2键盘+UART+PC机显示(5)PS2键盘+USB+PC机显示2、接口综合实验(1)USB UART(2)UART USB(3)RS232 RS485(4)RS485 RS2323、温度时间综合实验(1)DS18B20 + DS1302 + 数码管(2)DS18B20 + DS1302 + USB(3)DS18B20 + DS1302 + UART(4)DS18B20 + DS1302 + 16024、AD DA综合实验(1)ADC + 1602(2)ADC + UART(3)ADC + USB(4)DAC + LED + KEY(5)DAC + UART(6)DAC + USB(7)ADC + UART + DS1302(8)ADC + DAC + 1602 + KEY(9)ADC + DAC + UART + KEY5、其他综合实验(1)AT24C02高级应用(搜索,擦除,读出全部)(2)DS1302高级应用(内部RAM存取数据)6、12864液晶综合实验(1)汉字库(2)图形库7、3.2寸TFT触摸屏实验(1)静态图片(2)动画/***************************************************程序功能:BoardConfig.h 头文件---------------------------------------------------***************************************************/ typedef unsigned char uchar;typedef unsigned int uint;//控制位的宏定义#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7) #define SRCLK_1 P3OUT |= BIT7#define SRCLK_0 P3OUT &= ~BIT7#define SER_1 P3OUT |= BIT6#define SER_0 P3OUT &= ~BIT6#define RCLK_1 P3OUT |= BIT3#define RCLK_0 P3OUT &= ~BIT3//板上资源配置函数void BoardConfig(uchar cmd){uchar i;Ctrl_Out;Ctrl_0;for(i = 0; i < 8; i++){SRCLK_0;if(cmd & 0x80) SER_1;else SER_0;SRCLK_1;cmd <<= 1;}RCLK_1;_NOP();RCLK_0;}/***************************************************程序功能:控制8个LED闪烁,用于测试下载功能是否正常---------------------------------------------------测试说明:观察LED闪烁***************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯CCTL0 = CCIE; //使能CCR0中断CCR0 = 2047; //设定周期0.5STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P6DIR = 0xff; //设置P6口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM3; //CPU进入LPM3模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){P6OUT ^= 0xff; //P2口输出取反}/***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************//***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************/#include <msp430x14x.h>#include "BoardConfig.h"uint i = 0,j = 0,dir = 0;uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0);CCTL0 = CCIE; //使能CCR0中断CCR0 = 50000;TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式P6DIR = 0xff; //设置P2口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM0; //CPU进入LPM0模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数,在这里通过标志控制流水灯的流动方向和流动速度参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){if(flag == 0){P6OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1}else if(flag == 1){P6OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8}else{if(dir) //灯的点亮顺序D8 -> D1,D1 -> D8,循环绕圈{P6OUT = ~(0x80>>(i++));}else{P6OUT = ~(0x01<<(i++));}}if(i == 8){i = 0;dir = ~dir;}j++;if(j == 40){i = 0;j = 0;flag++;if(flag == 4) flag = 0;switch(speed){case 0:TACTL &=~ (ID0 + ID1);TACTL |= ID_3;break;case 1:TACTL &=~ (ID0 + ID1);TACTL |= ID_2;break;case 2:TACTL &=~ (ID0 + ID1);TACTL |= ID_1;break;case 3:TACTL &=~ (ID0 + ID1);TACTL |= ID_0;break;default:break;}if(flag != 3) speed++;if(speed == 4) speed = 0;}}/*******************************************************程序功能:用从P2.3和P2.4输出的PWM波形驱动LED闪烁P2.3口输出方波的占空比为75%P2.4口输出方波的占空比为25%-------------------------------------------------------测试说明:观察LED的亮灭的时间长短用来连2.3到6.1口看*******************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗//BoardConfig(0xb0); // 关闭数码管和电平转换,打开流水灯P2DIR = 0xff; // P2端口设置为输出P2OUT = 0xff; // 关闭其他LEDP2SEL |= BIT3 + BIT4; // P2.3和P2.4连接内部模块CCR0 = 4096-1; // PWM周期为1SCCTL1 = OUTMOD_7; // CCR1 reset/setCCR1 = 3072; // CCR1 PWM duty cycleCCTL2 = OUTMOD_7; // CCR2 reset/setCCR2 = 1024; // CCR2 PWM duty cycleTACTL = TASSEL_1 + ID_3 + MC_1; // ACLK/8, up mode_BIS_SR(LPM3_bits); // Enter LPM3}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK//// Description: Output buffered MCLK, SMCLK and ACLK.// ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2// //* XTAL's REQUIRED - NOT INSTALLED ON FET *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//内部已经连好了的//// MSP430F149// -----------------// /|\| XIN|-// | | | 32k// --|RST XOUT|-// | |// | XT2IN|-// | | XTAL (455k - 8Mhz)// |RST XT2OUT|-// | |// | P5.4|-->MCLK = DCO Max// | P5.5|-->SMCLK = XT2// | P5.6|-->ACLK = 32kHz//// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench Version: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer DCOCTL = DCO0 + DCO1 + DCO2; // Max DCOBCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSELBCSCTL2 |= SELS; // SMCLK = XT2P5DIR |= 0x70; // P5.6,5,4 outputsP5SEL |= 0x70; // P5.6,5,5 optionswhile(1){}}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, LPM3 Using WDT ISR, 32kHz ACLK//// Description: This program operates MSP430 normally in LPM3, pulsing P3.4// at 4 second intervals. WDT ISR used to wake-up system. All I/O configured// as low outputs to eliminate floating inputs. Current consumption does// increase when LED is powered on P3.4. Demo for measuring LPM3 current.// ACLK= LFXT1/4= 32768/4, MCLK= SMCLK= default DCO// //* External watch crystal on XIN XOUT is required for ACLK *////暗久才亮一下和亮暗和时钟没关系啊// MSP430F149// ---------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.5|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);//BCSCTL1 |= DIVA_2; // ACLK/4WDTCTL = WDT_ADL Y_1000; // WDT 1s/4 interval timerIE1 |= WDTIE; // Enable WDT interruptP1DIR = 0xFF; // All P1.x outputsP1OUT = 0; // All P1.x resetP2DIR = 0xFF; // All P2.x outputsP2OUT = 0; // All P2.x resetP3DIR = 0xFF; // All P3.x outputsP3OUT = 0x30; // All P3.x resetP4DIR = 0xFF; // All P4.x outputsP4OUT = 0; // All P4.x resetP5DIR = 0xFF; // All P5.x outputsP5OUT = 0; // All P5.x resetP6DIR = 0xFF; // All P6.x outputsP6OUT = 0x80; // All P6.x resetwhile(1){uint i;_BIS_SR(LPM3_bits + GIE); // Enter LPM3P3OUT &= ~BIT5; // Set P3.5 LED on亮for (i = 18000; i>0; i--); // DelayP3OUT |= BIT5; // Clear P3.5 LED off暗}}#pragma vector=WDT_VECTOR__interrupt void watchdog_timer (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)}//******************************************************************************* // MSP-FET430P140 Demo - Software Toggle P3.4//// Description: Toggle P3.4 by xor'ing P3.4 inside of a software loop.// ACLK= n/a, MCLK= SMCLK= default DCO ~800k//// MSP430F149// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT4; // Set P3.4 to output directionfor (;;){volatile unsigned int i;P3OUT ^= BIT4; // Toggle P3.4 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}//****************************************************************************** // MSP-FET430P140 Demo - WDT, Toggle P3.4, Interval Overflow ISR, DCO SMCLK//P3.4使用软件WDT中断时间。