hejecu

  • 2018-11-24
  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第十四章 低功耗实验

                                                                    第十四章 低功耗实验 14.1 实验目的 本章学习STM32的低功耗控制,掌握如何进入低功耗状态以及如何从此状态唤醒,数据手册请参看第4章电源控制PWR中的内容。 14.2 实验简介 现在很多MCU都有低功耗控制,当需要系统省电时,就需要进入适当的低功耗模式来降低系统的功耗,由其当MCU用在电池供电的设备上时,低功耗尤为重要,下面我们介绍STM32F4的3种低功耗模式及其唤醒条件。 睡眠模式:进入睡眠模式时,内核时钟停止,从睡眠模式中恢复并不需要任何特殊的序列,但要重新使能ARM内核的时钟。在睡眠模式下,指令的执行被中止直至复位或中断出现。外设在CPU内核处于睡眠模式期间继续运转,并可产生中断使处理器恢复执行指令。睡眠模式下,处理器内核自身、存储器系统、有关控制器及内部总线停止工作,因此这些器件的动态功耗会降低。只要出现任何使能的中断,CPU内核就会从睡眠模式中唤醒。 停止模式:在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.2V供电区域的的所有时钟都被停止, PLL、 HSI和HSE RC振荡器的功能被禁止, SRAM和寄存器内容被保留下来。在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。 停止模式进入和退出 待机模式:待机模式可实现系统的最低功耗。该模式是在Cortex-M4深睡眠模式时关闭电压调节器。整个1.2V供电区域被断电。 PLL、 HSI和HSE振荡器也被断电。 SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。 待机模式的进入和退出 这三种模式最低功耗的是待机模式,其只需要2.2uA左右的电流。停机模式是次低功耗的,其典型的电流消耗在350uA左右。最后就是睡眠模式了。 14.3 电路设计 本实验用到的硬件资源有LED、按键以及串口,电路图前面已经介绍过,LED指示程序运行,按键用于唤醒MCU。 14.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的实验11 低功耗实验,其下有3个实验,分别对应待机模式、停止模式和休眠模式,这里我们以待机模式为例,另外2种模式,请读者自行查看。打开待机模式下的实验工程,左侧目录树BSP下的pwr.c文件,此为STM32的低功耗控制驱动程序文件,工程目录如下图所示: 图14.4.1 打开pwr.c文件,其中关于待机模式的代码如下: 打开main.c文件,代码如下: 14.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验11 低功耗实验”工程代码,编译下载,程序运行,D4 D5指示灯亮灭一次,然后快速闪烁,按下一次KEY3按键,进入待机模式,如果按下KEY1(PA0)按键,PA0产生一个上升沿跳变,就会唤醒MCU,LED重新闪烁。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第十四章 低功耗实验

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第十三章 FLASH数据存储实验

    本帖最后由 hejecu 于 2018-11-24 17:09 编辑                                                                         第十三章 FLASH数据存储实验 13.1 实验目的 学习STM32的IAP(在应用编程功能),可以把没有用到的片上FLASH用作数据存储。数据手册请参看第2章。 13.2 实验简介 不同型号的STM32F4,其FLASH容量也有所不同,最小的只有128K字节,最大的则达到1024K字节。星光的闪电F407开发板选择的STM32F407ZGT6的FLASH容量为 1024K字节,属于大容量产品(另外还有中容量和小容量产品),其闪存结构图如下: 图13.2.1 STM32F4 的闪存模块由:主存储器、系统存储器、 OPT区域和选项字节等4 部分组成。主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。分为12个扇区,前个扇区为16KB大小,然后扇区4是64KB大小,扇区5~11 是128K大小,不同容量的STM32F4,拥有的扇区数不一样,比如我们的 STM32F407ZGT6,则拥有全部12个扇区。从上图可以看出主存储器的起始地址就是 0X08000000,B0、B1都接GND的时候,就是从0x08000000 开始运行代码的。         系统存储器,这个主要用来存放 STM32F4 的bootloader 代码,此代码是出厂的时候就固化在STM32F4里面了,专门来给主存储器下载代码的。当B0接 V3.3,B1接GND的时候,从该存储器启动(即进入串口下载模式)。 OTP区域,即一次性可编程区域,共528字节,被分成两个部分,前面 512 字节(32 字节为 1 块,分成16块),可以用来存储一些用户数据(一次性的,写完一次,永远不可以擦除!),后面16字节,用于锁定对应块。         选项字节,用于配置读保护、BOR 级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。         闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。         在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。 编程和擦除闪存 闪存编程一次可以写入8位、16位、32位。         闪存擦除操作可以按页面擦除或完全擦除(全擦除)。全擦除不影响信息块。         为了确保不发生过度编程, 闪存编程和擦除控制器块是由一个固定的时钟控制的。         写操作(编程或擦除)结束时可以触发中断。仅当闪存控制器接口时钟开启时,此中断可以用来从WFI模式退出。 闪存读取 STM32F4 可通过内部的I-Code指令总线或D-Code数据总线访问内置闪存模块,本章我们主要讲解数据读写,即通过D-Code数据总线来访问内部闪存模块。 为了准确读取Flash数据,必须根据CPU时钟(HCLK) 频率和器件电源电压在 Flash 存取控制寄存器 (FLASH_ACR)中正确地设置等待周期数 (LATENCY)。当电源电压低于 2.1V 时,必须关闭预取缓冲器。 Flash等待周期与 CPU 时钟频率之间的对应关系,如表13.2.1 所示: 表13.2.1 CPU时钟(HCLK)频率对应的FLASH等待周期表 具体寄存器内容,请参看数据手册中第2章节的内容。 13.3 电路设计 用到的硬件资源有串口,电路图前面章节介绍过,IAP编程属于片上资源,所以电路图这里略过。 13.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的“实验10 FLASH数据存储实验”工程,打开左侧目录树BSP下的stm32_flash.c文件,此为STM32的FLASH的读写驱动程序文件,工程目录如下图所示: 图13.4.1 打开stm32_flash.c文件,代码如下: 打开main.c,代码如下: 13.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验10 FLASH数据存储实验”工程代码,编译下载,打开串口调试助手,串口波特率115200,程序功能是向STM32F407ZGT6的FLASH扇区5和6,即地址0x08020000开始处写入250字节数据,然后再读出来,比较读出和写入是否一致,正确串口打印STM32 FLASH ReadWrite OK,错误串口打印STM32 FLASH ReadWrite ERROR。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第十三章 FLASH数据存储实验

  • 2018-11-17
  • 回复了主题帖: 【连载】【星光闪电STM32F407开发板】第十章 串口通信实验

    懒猫爱飞 发表于 2018-11-15 10:02 用DMA,配合空闲中断,会少点用总线资源
    是的,开发板的串口通信采用的是中断方式,没有采用DMA

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第十二章 RTC实验

    第十二章 RTC实验 12.1 实验目的本实验旨在掌握STM32的实时时钟RTC的使用,利用其测量日期时间,数据手册请参看第16章。 12.2 实验简介STM32 的实时时钟(RTC)是一个独立的定时器。 STM32的RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。         RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前,先要取消备份区域(BKP)写保护。STM32的RTC具有掉电继续运行的特性,在主电源VDD 断开时,为了 RTC 外设掉电继续运行,必须给STM32芯片通过VBAT引脚接上锂电池。当主电源 VDD 有效时,由VDD给RTC外设供电。当VDD掉电后,由VBAT给RTC外设供电。但无论由什么电源供电,RTC中的数据都保存在属于RTC的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失。 备份域除了RTC模块的寄存器,还有42个16位的寄存器可以在VDD掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位。         STM32F4 的实时时钟(RTC)相对于STM32F1来说,改进了不少,带了日历功能了,STM32F4的RTC,是一个独立的BCD定时器/计数器。RTC提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A和ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC还包含用于管理低功耗模 式的自动唤醒单元。         两个 32 位寄存器(TR和DR)包含二进码十进数格式 (BCD) 的秒、分钟、小时(12或24小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值。         STM32F4的RTC可以自动将月份的天数补偿为 28、 29(闰年)、 30 和 31 天。并且还可以进行夏令时 补偿。         RTC 模块和时钟配置是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变,只要后备区域供电正常,那么 RTC 将可以一直运行。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前,先要取消备份区域(BKP)写保护。从RTC的定时器特性来说,它是一个32位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的128分频: HSE/128;低速内部时钟LSI;使HSE分频时钟或LSI的话,在主电源 VDD 掉电的情况下,这两个时钟来源都会受到影响,因此没法保证RTC正常工作。因此RTC一般使用低速外部时钟LSE,频率为实时时钟模块中常用的32.768KHz,这是因为32768 = 215,分频容易实现,所以它被广泛应用到RTC模块。在主电源 VDD有效的情况下(待机), RTC还可以配置闹钟事件使STM32退出待机模式。         RTC的框图如下图所示: 图12.2.1 RTC功能框图12.3 电路设计本实验用到的硬件资源有TFT、串口和RTC,RTC为片上资源,其相关的外围电路就是32.768KHz晶振电路和电池电路,其它资源电路,前面已经介绍过,这里略过。12.4 软件设计打开光盘目录下的3、程序源码->1、基础实验->下的实验9 RTC实验工程,打开左侧目录树BSP下的rtc.c文件,此为RTC实时时钟的驱动程序文件,工程目录如下图所示: 图12.4.1打开rtc.c文件,代码如下: 打开main.c文件,代码如下: 12.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验9 RTC实验”工程代码,编译下载,打开串口调试助手,串口波特率115200,每隔1S打印一次当前日期时间信息。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第十二章 RTC实验

  • 2018-11-14
  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第十章 串口通信实验

                       第十一章 串口通信实验 11.1 实验目的通过本实验的学习,掌握STM32的串口使用,实现通过串口发送和接收数据。数据手册请参看第26章。 11.2 实验简介串口通讯(Serial Communication)是一种设备间很常用的串行通讯方式,串 口按位(bit)发送和接收字节,尽管比按字节(byte)的并行通信慢,但是串口 可以在使用一根线发送数据的同时用另一根线接收数据。大部分电子设备都支持 该通讯设备,作为计算机与单片机交互数据的主要接口,广泛用于各类仪器仪表、 工业检测以及自动控制领域。通信协议是需要通信的双方所达成的一种约定,它 对包括数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题作出统一规定,通信双方都必须共同遵守。串口通讯我们一般分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。物理层:就是最底层的电平信号传输,大家熟知的RS232、RS485这些芯片,就是实现的物理层的电平转换,将单片机的TTL电平,转换成相应的接口电平。星光的闪电F407开发板,板载了一个USB转串口芯片,将TTL信号转换成USB接口的差分信号,这也算是一种物理层芯片。关于RS232和RS485,会在后面的实验中介绍介绍。串口通信分为单工、半双工、全双工三种,取决于物理层的收发器芯片:Ø 单工:只能由一方A传到另一方B。Ø 半双工:可以双向传输,但不能同时存在。Ø 全双工:可以同时存在双向传输。协议层:串口传输一个字符的格式分为起始位、数据位、奇偶校验位、停止位和空闲位。Ø 起始位:发出一个逻辑“0”信号,表示传输字符开始。Ø 数据位:紧接在起始位之后,数据位的个数可以是5、6、7、8,一般采用8位,首先传送最低位。Ø 奇偶校验位:奇偶校验是串口通信中的一种简单纠错方式,数据位加上这一位后,使得1的位数是偶数(偶校验)或奇数(奇校验)。Ø 停止位:它是一个字符数据传输结束的标志。可以是1位、1.5位、2位的高电平。Ø 空闲位:处于逻辑“1”状态,表示当前传输线路上没有数据。 11.3 电路设计星光闪电F407开发板板载一个USB串口,芯片采用CH340G,接口采用MINI USB接口,连接到STM32的USART1的PA9、PA10,电路如图11.3..1所示: 图11.3.1 11.4 软件设计打开光盘目录下的3、程序源码->1、基础实验->下的实验8 串口通信实验工程,打开左侧目录树BSP下的Usart.c文件,此为串口的驱动程序文件,工程目录如下图所示: 图11.4.1打开Usart.c文件,代码如下: 11.5 下载验证用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验8 串口通信实验”工程代码,编译下载,打开串口调试助手,串口波特率115200,按一次KEY1按键发送一条信息,接收到一条信息会将接收到的内容回送回去。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第十章 串口通信实验

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第十章 窗口看门狗实验

    第十章 窗口看门狗实验10.1 实验目的 本章学习STM32的另一个看门狗--窗口看门狗的使用。数据手册请参看第19章。 10.2 实验简介 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG->CR 的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新,如下图所示: 图10.2.1窗口看门狗会在2种条件下引发复位: 当递减计数器的值小于0x40,则产生复位。 当递减计数器的值大于窗口值时重载计数器,则产生复位。 所以要避免复位,递减计数器必须在其值小于窗口寄存器的数值并且大于0x3F时被重新装载,因为窗口看门狗有一个WEI中断,开启时,当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(ISR)可以用来加载计数器以防止WWDG复位。 10.3 电路设计 这里我们利用前面章节的按键盒LED电路,来验证窗口看门狗的监视复位功能。 10.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的实验7 窗口看门狗实验工程,打开左侧目录树BSP下的wwdg.c文件,此为窗口看门狗的驱动程序文件,工程目录如下图所示: 图10.4.1打开wwdg.c文件,代码如下: 打开main.c文件,代码如下: 10.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验7 窗口看门狗实验”工程代码,编译下载,D4、D5指示灯,慢闪烁(窗口看门狗WWDG复位所致),按下KEY1按键不松开,D4、D5指示灯快闪烁(没有复位)。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第十章 窗口看门狗实验

  • 2018-11-11
  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第九章 独立看门狗实验

                     第九章 独立看门狗实验 9.1 实验目的STM32的内部自带2个看门狗:独立看门狗和窗口看门狗,本章我们学习独立看门狗的使用。 9.2 实验简介看门狗的作用:是在微控制器进入错误状态后的一定时间内复位。当看门狗使能时,如果用户程序没有在溢出周期内喂狗(给看门狗定时器重装定时值),看门狗会产生一个系统复位,这样在程序运行时开启看门狗,对程序进行监视,可防止程序跑飞而死机。STM32 的独立看门狗由内部专门的32Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的32Khz,而是在15~47Khz之间的一个可变化的时钟,只是我们在估算的时候,以32Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。         无论何时,只要键寄存器 IWDG_KR 中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。IWDG_PR 和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。 将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。注意 IWDG在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开IWDG,否则还是不能关闭。 9.3 电路设计这里我们利用前面章节的按键盒LED电路,来验证看门狗的监视复位功能。 9.4 软件设计打开光盘目录下的3、程序源码->1、基础实验->下的实验6 独立看门狗实验工程,打开左侧目录树BSP下的iwdg.c文件,此为独立看门狗的驱动程序文件,工程目录如下图所示: 图9.4.1 打开iwdg.c文件,代码如下:                                                                          打开main.c文件,代码如下:                                                                          9.5 下载验证用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验6 独立看门狗实验”工程代码,编译下载,D4、D5指示灯常亮一下,然后快闪烁一下,如果没按下KEY1按键,看门狗复位,重复前面的过程;如果按下KEY1按键不松开,D4 和D5指示灯快闪烁,看门狗不会复位。

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第九章 独立看门狗实验

  • 2018-11-04
  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第八章 外部中断实验

                                                                    第八章 外部中断实验 8.1 实验目的 本实验旨在学习STM32的外部输入中断的使用方法,上一章中的4个按键输入,其实都可以配置成中断输入的方式,下面我们来学习此功能。 8.2 实验简介 8.2.1什么是中断? 本来处于正常状态(比如我现在处于写程序状态),突然有个外部因素干扰(比如快递员打电话叫我去拿快递),然后马上处理干扰事项(跑下楼去签收快递),解决好后又回到原来正常状态(拿好快递后又开始写程序)。在中断产生后一般会去执行中断服务函数,实现特定任务(这里跑下来去签收快递就是中断服务函数内容)。STM32的中断是如何管理的呢--NVIC。 8.2.2 NVIC--嵌套向量中断控制器 NVIC 即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。 STM32的中有一个强大而方便的NVIC,它是属于CM4内核的器件。 NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对CM4内核里面的 NVIC进行裁剪,把不需要的部分去掉,所以说STM32的NVIC是CM4的NVIC的一个子集。CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM4内核的全部东西,而是只用了它的一部分。 STM32F407芯片有70个中断,包括10个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级,我们常用的就是这 60个可屏蔽中断。关于NVIC寄存器位的具体定义可以参考。同时推荐阅读《 CortexM4内核编程手册》。 8.2.3 中断优先级 STM32 中有两个优先级的概念:抢占式优先级和响应优先级,响应优先级也 称子优先级,每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响 8.2.4 优先级分组 优先级的分组由内核外设SCB的应用程序中断及复位控制寄存器AIRCR的PRIGROUP[10:8]位决定,有5个可选分组, 如下图。                                                                                                                                   图8.2.4.1 我们就可以清楚的看到组0--4对应的配置关系,例如组设置为2,那么此时所有的60个中断,每个中断的中断优先寄存器的高四位中的最高2位是抢占优先级,低2位是响应优先级。每个中断,你可以设置抢占优先级为0~4,响应优先级也可设置为 0~4。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 8.2.5 EXTI--外部中断/事件控制器 STM32的每个IO都可以作为外部中断的中断输入口,这点也是STM32的强大之处。 STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F407的22个外部中断为: EXTI线 0~15:对应外部IO口的输入中断。 EXTI线 16:连接到 PVD 输出。 EXTI线 17:连接到 RTC 闹钟事件。 EXTI线 18:连接到 USB 唤醒事件。 EXTI 线 19:连接到以太网唤醒事件。 EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。 EXTI 线 21:连接到 RTC 入侵和时间戳事件。 EXTI 线 22:连接到 RTC 唤醒事件。 STM32使用的IO中断只有16个,那STM32的所有IO是怎么连接到这16个中断上的呢,它们间有如下映射关系,如图8.2.5.1所示:                                                                                                                                                图8.2.5.1 8.3 电路设计 电路同上一章中的用户按键电路,电路图请参看上一章,这里略过。 8.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的实验5 外部中断实验工程,打开左侧目录树BSP下的Exti.c文件,此为外部输入中断的驱动程序文件,工程目录如下图所示:                                                                                                                                                                       图8.4.1 打开Exti.c文件,代码如下:                                                                                                                                                                                             打开main.c文件,代码如下,将按键KEY1和KEY2配置成外部中断输入                                              此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处 8.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验5 外部中断实验”工程代码,编译下载,按下KEY1按键LED灯D4、D5点亮,按下KEY2按键LED灯D4、D5熄灭。

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第八章 外部中断实验

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第七章 按键输入实验

                      第七章 按键输入实验 7.1 实验目的本实验旨在学习STM32的IO口作为数字输入口的使用方法,开发板板载4个功能按键,通过这几个按键学习机械按键的检测原理。 7.2 实验简介常用的按键键盘分为独立式按键和矩阵式按键。独立式按键电路为每个按键占用一个IO口,按键数目较少时(6个以内)采用这种方式较好;矩阵式按键为行列扫描式按键电路,当按键较多时,采用这种方式为宜,占用IO较少。本实验采用的就是独立式按键电路。下图为1个4*4矩阵键盘示例。 图7.2.1按键在闭合和断开的瞬间,不会立即处于稳定的闭合或断开状态,会有一个抖动的过程,一般为5-10ms,如图7.2.2,在设计按键驱动程序时要注意这点,消除抖动的干扰,不然会出现按下一次按键,执行多次的现象,这就是抖动造成的。 图7.2.2按键消抖方法:① 检测到按键按下,延时20ms,再检测按键,如果依然按下,判断按键有效,执行相关操作。② 检测到按键按下,延时1ms,循环检测20次,20次后,按键依然按下,判断按键有效,执行相关操作。③ 检测到按键按下,利用定时器定时1ms,后再检测,循环检测20次,20次后,按键依然按下,判断按键有效,执行相关操作。这3种方法,第一种实时性最低,第三种实时性最高,星光开发板按键驱动采用的是第二种,后面章节学完定时器后,用户可以尝试实现第3种方法。 7.3 电路设计闪电F407开发板载有4个功能按键,电路如图7.3.1所示: 图7.3.1其中KEY1按键连接到PA0上,可用作普通按键,也可以用作待机唤醒输入,另外3个按键用作普通按键,KEY2-KEY4分别连接到STM32的PE2、PE3、PE4,这4个按键都可以作为普通IO输入,这4个按键都是低电平有效的。 7.4 软件设计打开光盘目录下的3、程序源码->1、基础实验->下的实验4 按键输入实验工程,打开左侧目录树BSP下的key.c文件,此为按键的驱动程序文件,工程目录如下图所示: 图7.4.1打开key.c文件,代码如下:                                                                                                                                                                                                                                                  按键驱动程序,用到一个按键信息结构体,定义在头文件key.h中,如下所示: 打开main.c文件,按键应用的处理代码如下:                                                                    7.5 下载验证用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验4 按键输入实验”工程代码,编译下载,按下KEY1键D4亮,按下KEY2键D4灭,按下KEY3键D5亮,按下KEY4键D5灭。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第七章 按键输入实验

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第六章SysTick验

                       第六章 SysTick实验 6.1 实验目的通过本实验学习SysTick定时器(操作系统的心跳)的使用,实现精准的定时。 6.2 实验简介SysTick定时器被捆绑在NVIC中,用于产生SysTick异常。在以前,操作系统和有所有使用了时基的系统,都必须要一个硬件定时器来产生需要的“滴答”中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。所有的Cortex M4都有这个定时器,它属于Cortex的内核部件,所有的CM4芯片的SysTick都是相同的,处理方式都一样,这样它使得基于此定时器时基的操作系统和软件在所有CM4芯片间的移植变得简单多了。SysTick是一个24位定时器,计数器以递减的方式工作,递减到0,硬件自动重装计数值,如果使能中断,则产生中断。它的使用配置很简单,下面我们了解一下:SYysTick的寄存器有4个如下,一般我们只用前3个名称描述访问复位值地址STK_CTRL系统定时器控制和状态寄存器RW00xE000E010STK_LOAD系统定时器重载值寄存器RWUnknown0xE000E014STK_VAL系统定时器当前值寄存器RWUnknown0xE000E018STK_CALIB系统定时器校准值寄存器RO0xC00000000xE000E01C SysTick控制寄存器,在初始化时要对此寄存器进行配置。                               SysTick重装寄存器,每当计数到0时,此寄存器值自动装入SysTick的递减计数器。                               SysTick的递减计数器                              6.3 电路设计SysTick定时器属于STM32内部资源,不需要外接其它电路,这里用板载的D5、D6指示灯的循环闪烁指示SysTick的定时功能。电路图略过。 6.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的实验3 SysTick实验工程,打开左侧目录树BSP下的Systick.c文件,此为SysTick的驱动程序文件,工程目录如下图所示: 图6.4.1打开Systick.c文件,代码如下:                                     图6.4.2 打开main.c文件,初始化系统时钟、LED管脚配置以及SysTick中断设置,每当1S中断到达时,翻转D5、D6这2个LED的输出状态,实现LED的闪烁,代码如下: 图6.4.3 6.5 下载验证用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验3 SysTick实验”工程代码,编译下载,D4 、D5指示灯,以1S的间隔闪烁,蜂鸣器鸣叫,用跳帽短接P8排针的1、3引脚,将D4连接到STM32的PB0引脚上如此循环。 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: 【连载】【星光闪电STM32F407开发板】第六章SysTick验

  • 发表了主题帖: 【连载】【星光闪电STM32F407开发板】第五章 蜂鸣器实验

    本帖最后由 hejecu 于 2018-11-4 09:45 编辑                   第五章 蜂鸣器实验 5.1 实验目的本实验旨在学习通过STM32的IO口控制蜂鸣器发出蜂鸣声,掌握蜂鸣器的常规控制电路。 5.2 实验简介蜂鸣器是一种一体化结构的电子音响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件,如下图所示。                                                                             http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A05.tmp.png图5.2.1蜂鸣器有无源蜂鸣器和有源蜂鸣器之分,简单来说,就是有源蜂鸣器通直流电就会叫,无源蜂鸣器需要用频率2K--5K的方波驱动它才会叫,否则直接通直流电是不会叫的。本实验中IO口输出高电平,三极管Q1导通,集电极为低电平,蜂鸣器鸣叫。 5.3 电路设计蜂鸣器控制脚连接到STM32的PC13脚,如图5.3.1,其中R18为限流电阻,R19为下拉电阻。控制引脚输出高电平时,三极管导通,蜂鸣器鸣叫;输出低电平时,三极管截止,蜂鸣器停止鸣叫。配置管脚时,PC13配置成推挽输出即可。http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A15.tmp.png    http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A16.tmp.jpg                                               图5.3.15.4 软件设计    打开光盘目录下的3、程序源码->1、基础实验->下的实验2 蜂鸣器实验工程,打开左侧目录树BSP下的Beep.c文件,此为蜂鸣器的驱动程序文件,工程目录如下图所示,                                                                             http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A27.tmp.jpg 图5.4.1打开Beep.c文件,代码如下:                                                                                                                                                                                                    http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A28.tmp.jpg http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A29.tmp.jpg http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A3A.tmp.jpg 图5.4.2打开main.c文件,初始化系统时钟和蜂鸣器输出管脚配置,最后在while循环中每隔1S打开或关闭蜂鸣器,代码如下                                                                     http://file:///C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ksohtml\\wps1A3B.tmp.jpg 图5.4.35.5 下载验证用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验2 蜂鸣器实验”工程代码,编译下载,蜂鸣器会响1秒停1秒,如此循环。 我的淘宝店https://shop148702745.taobao.com/ 此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处

TA暂时无记录哦~

最近访客

< 1/2 >

统计信息

已有59人来访过

  • 芯币:87
  • 好友:--
  • 主题:13
  • 回复:3
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言