stm32f7中管脚第二功能wkup主要用的有定时器中断,和外部中断。定时器中断是你设定中断时间,当时间到时产生中断;外部引脚中断是检测到引脚的电平高低变化后触发中断,每个引脚都可以设定为外部中断。当然还有其他的中断方式,慢慢学呗。
基本所有的管脚都可以作为输入输出,当然在一些像LVDS的管脚分配时,需要考虑所使用的管脚是否可用为输入,或者输出,普通管脚时不需要这些考虑的。在分配时,可以先看看手册,上边有说明的,或者在分配面板上,芯片图上,每一个管脚的大概功能都有一个简单的介绍。像,某一管脚,说明 IO(DATA3)DIFIFO_RX_LIIp,DIFFOUT_L22p(DQS7L)(DQSn5L/DQ5L),说明他可以作为IO使用,当然在LVDS管脚使用时,只能作为接收端的正管脚使用(DIFIFO_RX_LIIp)
1、烧录MicroPython固件。和串口下载程序一样,使用DFU烧录固件前。
2、再把stm32f411ceu6切换为系统存储器启动模式:即下载模式。上电之前要先设置BOOT0=1,BOOT1(PB2)=0,然后烧录MicroPython固件。
大家翻开STM32的中文参考手册(你们看就行了,我翻,然后截图),里面关于STM32的低功耗模式有详细的标注,突然不想截图。。
1、睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)
2、停止模式(所有的时钟都已停止)
3、待机模式(1.8V电源关闭)(我们本博客中具体介绍的一种模式,也是功耗最低的模式)
现附上三者照片、、望观众好好欣赏、、还有请稍微注意下我的涂鸦、、小弟感激不尽:
啊哈、、这照片是不是很神奇呀、、即把三个老家伙的家底进行了较为认真的比较,而且从照片中我们也可以看出,如何进入,如何唤醒他们、、而且有什么影响都跟我们透露了、、可谓是后生可畏呀、、所以我叫大家注意我美丽的涂鸦是有道理的、、哈、
在本博客中,我们就利用WKUP引脚的上升沿来唤醒MCU、、不好意思哈、、老是把上升沿打成上小沈阳、、所以我们就具体来介绍待机唤醒的实现方法、、
那我们要怎么来进入待机模式、、又要怎么唤醒呢?
看到“进入”中的红色数字标号了吧、、没错了、、我们只要按照此步骤来设置相应的寄存器就行了、、那、、我打???的是什么呢??好了、、请容许我介绍下:
1、 Cotex_M3系统控制寄存器中的SLEEPDEEP位到底在哪呢??大家请翻开《权威指南》第182页可以看到表格、、当然这里不用你翻开、、因为我已截图:
2、电源控制寄存器(PWR_CR)中PDDS位:请看寄存器的位:
3、电源控制/状态寄存器(PWR_CSR)中EWUP位
至此、我们通过这三步、完成了进入待机模式的任务、、那我们怎么通过程序实现呢?啊哈、、库神出现吧、、:::系统出现奔溃、、请稍后、、详情请咨询10086、、
额、、出现了点意外、、不急哈、、那我们先来看看怎么退出待机模式:重现一张图片:
看到了吧、、在这里我们就利用其中一种方式来唤醒:WKUP引脚的上升沿、、注意哈、、注意此上升沿三个字哈、、 至于为什么要注意上升沿、、在这里提出我也是有目的、、先记着哈、、你此时想的为什么要注意的原因肯定跟我待会提到的时候不一样、、在此先奸笑下、、
那我们要怎么来唤醒呢??
亲、、我们通过外部中断触发来唤醒、、所以请看代码:
1 void Wkup_Init(void)
2 {
7 EXTI_InitTypeDef EXTI_InitStructure;
8 NVIC_InitTypeDef NVIC_InitStructure;
9
10 KEY_Init();//我的IO初始化在按键里已经初始化了
11
12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
13
14 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
15
16 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //PA0
17 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
18 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
19 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
20 EXTI_Init(EXTI_InitStructure);
21
22 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
23 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
24 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
25 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
26 NVIC_Init(NVIC_InitStructure);
27
28 if(Check_up() == 0) //系统初始化后由于没有按下按键、、所以系统直接进入了待机模式了,所以下载了程序没有任何反应、、需要人为的唤醒:死猪,就知道睡,快醒、、
29 {
30 Sys_Standby(); //进入待机模式
31 }
32 }
复制代码
复制代码
//正常模式下会运行中断服务函数,而待机模式下则不会运行中断服务函数、、因为待机模式下MCU不工作,所以上升沿的作用也仅仅是唤醒、、
//在这里提醒:唤醒只需要上升沿、、所以从待机模式切换到正常模式下从始至终都不会执行中断服务函数
//在这里,知道我为什么要在上面提醒大家要注意上升沿了吧、(下面还有)、
//至于为什么不会执行,待会我还会给出解释、、
3 void EXTI0_IRQHandler(void)
4 {
5 EXTI_ClearITPendingBit(EXTI_Line0);
6 if(Check_up())
7 {
8 Sys_Enter_Standby();
9 }
10 }
stm32f411ceu6用Micropythor烧录固件的方法如下
MicroPython,是Python3编程语言的一个完整软件实现,包括Python标准库的一小部分,用C语言编写,经过优化可在微控制器和受限环境中运行。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。
在系统启动2秒后,实时时钟(RTC)每3秒钟产生一个闹钟事件(Alarm event),使系统进入停机模式以降低功耗。有2种方式可以是系统退出此模式:1.在外部中断线9上侦测到上升沿信号。2.每3秒钟由实时时钟闹钟自动将系统唤醒。4个LED可以表征系统当前的状态:- LD1 on / LD4 off: 系统在运行模式(RUN mode)下- LD1 off / LD4 on: 系统在停机模式(STOP Mode)下- LD2 状态改变:系统通过外部中断线9退出停机模式(STOP Mode)- LD3状态改变:系统通过外部中断线17(实时时钟闹钟)退出停机模式(STOP Mode)PWR Example 2本例展示了如何使STM32进入待机模式(Standby Mode),以及如何通过外部重置、实时时钟闹钟(RTC Alarm)或者WKUP管脚来唤醒STM32。在例程中,设置在外部中断线9上(管脚PB.09)检测到下降沿时产生中断。以及Systick每隔250ms产生一个中断,在这个中断中,改变连接在PC.06管脚上LED的状态,以次来提示系统工作在运行模式(RUN mode)。一旦在外部中断线9上(管脚PB.09)检测到下降沿,系统将开启实时时钟闹钟(RTC Alarm),每三秒钟产生一个闹钟事件(Alarm event)。然后系统进入待机模式(Standby Mode)。在3秒内,在WKUP管脚上的上升沿或者外部复位都可以把系统从待机模式中唤醒,如果3秒内他们没有发生,那么由实时时钟闹钟自动唤醒系统。系统被唤醒以后,程序执行的顺序与重置后一样,PC.06上的LED开始闪耀,PC.07上的LED被点亮。实时时钟(RTC)设置被保留,因此无须对其再进行设置。 如果对于系统运行没有影响,可以忽略不计。
本文标签:stm32f411ceu6的wkup