STM32F407(2)

    xiaoxiao2021-03-25  182

    STM32F407ZGT6:144个引脚,112个IO。

    GPIO输入模式:上拉、下拉、浮空、模拟。(与F103有区别:上拉、下拉设置在外面)

    GPIO输出模式:开漏(输出强低电平、寄存器输出)、推挽(输出强高低电平、外设输出)、开漏复用、推挽复用。

    IO引脚的复用和映射:

    每个引脚有一个复用器,该复用器只允许一个外设的复用功能(AF)连接到对应的IO口,这样确保公用一个IO引脚的外设之间不会发生冲突,

    每个复用器采用16路复用功能输入(AF0-AF15),通过GPIOx_AFRL(引脚0-7)、GPIOx_AFRH(引脚8-15)两个32位寄存器对这些输入进行配置,每个IO引脚用4位。

    STM32F407ZGT6:有92个中断,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级。

    中断管理:

    首先对STM32中断进行分组(0-4),每个中断设置一个抢占优先级和一个响应优先级值。

    组0 :  0位抢占优先级,4位响应优先级。

    组1 :  1位抢占优先级,3位响应优先级。

    组2 :  2位抢占优先级,2位响应优先级。

    组2 :  3位抢占优先级,1位响应优先级。

    组4 :  4位抢占优先级,0位响应优先级。

    (数值越低,级别越高)

    分组配置在寄存器SCB->AIRCR中8-10位配置,每个中断中IP寄存器(8位)中4-7位设置分配情况(例如:两位设置抢占、两位设置响应)。

    响应优先级只有在抢占优先级相同时才有作用。

    抢占优先级相同,高响应优先级不可以打断低响应优先级;只是在两者的中断同时发生时,响应优先级高的先执行。

    常见串行通信接口:

                    通信标准                                                                           引脚说明                                       通信方式        通信方向

    1、UART(通用异步收发器,无时钟信号):TXD-发送端、RXD-接收端、GND-公共地,    异步通信,   全双工。

          USART(通用同步异步收发器,有时钟信号)

    2、单总线(1-wire)                                       :DQ-发送 / 接收端                                                   异步通信,   半双工。

    3、SPI                                                                :SCK-同步时钟、MISO-主机输入从机输出、     同步通信,   全双工。

                                                                                                                   MOSI-主机输出从机输入、

    4、I2C                                                                :SCL-同步时钟、SDA-数据输入 / 输出端            同步通信,   半双工。

    串口通信每次传输16位包括:1、起始位,2、数据位(8位或者9位),3、奇偶校验位(第9位),4、停止位(1,15,2位),5、波特率设置。

    发送 / 接收

    RX            -> 接收移位寄存器 (<- 接收器控制 <- 接收器时钟)-> 接收数据寄存器 -> 数据总线。

    数据总线 -> 发送数据寄存器 (<-发送控制 <- 发送器时钟) -> 发送移位寄存器 -> TX。

    接收器时钟、发送器时钟受同一个波特率控制(波特率可以不为整数),时钟来源 fPCLKx。串口1、6使用时钟 fPCLK2,串口2-5使用时钟 fPCLK1。

    Tx / Rx 波特率 = fPCLKx / (16*USARTDIV)。USARTDIV是一个无符号的定点数,由它可以得到串口波特率寄存器USART1->BRR的值。

    由USARTDIV得到串口USART_BRR寄存器的值:(假设串口1波特率为115200,PCLK时钟(即APB2总线时钟频率)为84M,采样除法器中OVER8 = 0)。

    USARTDIV = 84000000 / (115200*16) = 45.572

    得到:DIV_Fraction = 16*0.572 = 9 =0X09;

                DIV_Mantissa = 45 = 0X2D;

    常用串口相关寄存器:

    USART_SR 状态寄存器(用到0-9位,每个位是状态标志位)

    USART_DR 数据寄存器(用到0-8位)

    USART_BRR 波特率寄存器(用到0-3位(USARTDIV的小数)、4-15位(USARTDIV的尾数)、USARTDIV为USART的除数)

    USART_CR 控制寄存器

    外部中断:

    STM32F407的每个IO都可以作为外部中断输入。

    中断控制器支持中断有22个,包括:EXIT线0-15(对应外部IO口的中断输入)、EXIT线16(连接到PVD输出)、EXIT线17(连接到RTC闹钟事件)、

                                                         EXIT线18(连接到USB OTG FS唤醒事件)、EXIT线19(连接到以太网唤醒事件)、

                                                         EXIT线20(连接到USB OTG HS(在FS中配置)唤醒事件)、EXIT线21(连接到RTC入侵和时间戳事件)、

                                                         EXIT线22(连接到RTC唤醒事件)。

    16个IO中断线,每个中断线只能映射 P(A-H)x 7个IO口中的一个。例如:GPIOx.0映射到EXIT0 。。。GPIOx.15映射到EXIT15。

    每个外部中断线可以独立的配置触发方式(上升沿,下降沿,双边沿触发),触发 / 屏蔽,专用的状态位。

    IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数,外部中断线5-9分配一个中断向量,公用一个中断服务函数,外部中断线10-15分配一个中断向量,公用一个中断服务函数。

    看门狗:

    专门用于监测单片机程序运行状态的模块或者芯片,在启动正常运行时,系统不能复位;在系统跑飞(程序异常运行)的情况,系统复位,程序重新执行。

    STM32内置两个看门狗(独立看门狗 / 窗口看门狗)用来检测和解决软件错误引起的故障,当计数器达到给定的超时值时,触发一个中断(仅适用窗口看门狗)或者产生系统复位。

    独立看门狗(IWDG)由专用的低速时钟(LSI)驱动(32kHz -> 8位预分频器 -> 12位 递减计数器 -> IWDG),即主时钟发生故障它仍有效,适用于作为在一个主程序之外能够完成独立工作,并且对时间精度要求低的场合。

    相关寄存器(32位):键值寄存器(IWDG_KR)(0-15位有效)、预分频寄存器(IWDG_PR)(0-2位有效、有写保护功能)、

                                            重装载寄存器(IWDG_RLR)(0-11位有效、有写保护功能)、状态寄存器(IWDG_SR)(0-1位有效)

                                         (在键值寄存器(IWDG_KR)写入0x5555取消写保护)

    键值寄存器(IWDG_KR)中写入0xCCCC开启看门狗,计数器从其复位值(0xFFF)递减,到0x000时会产生一个复位信号(IWDG_RESET),在键值寄存器(IWDG_KR)写入0xAAAA喂狗,自动重装载寄存器(IWDG_RLR)的值就会重新加载到计数器。

    溢出时间 Tout = ((4*2∧prer)*rlr) / 32

    时钟频率 LSI = 32K ,一个看门狗时钟周期就是最短超时时间。

    最长超时时间 = (IWDG_RLR寄存器最大值) x 看门狗时钟周期

    窗口看门狗由APB1时钟分频后得到时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作,适用于在精确计时窗口起作用的程序。之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),可以通过设定相关寄存器来设定上限时间(下限固定(0x3F)),喂狗时间不能过早也不能过晚,不在窗口内喂狗就复位。

    相关寄存器(32位):控制寄存器(WWDG_CR、0-7位)、配置寄存器(WWDG_CFR、0-9位)、状态寄存器(WWDG_SR、0位)

    如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位。

    窗口看门狗的超时公式 : Twwdg = (4096 *2∧WDGTB*(T[5 : 0] + 1))/ Fpclk1;

                                               其中Twwdg : WWDG超时时间(单位为ms)

                                               Fpclk1 : APB1 的时钟频率(单位为Khz)

                                               WDGTB :WWDG的预分频系数

                                               T [5 : 0] :   窗口看门狗的计数器低6位

    窗口看门狗上窗口值W[6 :0]必须大于下窗口值0x40,否则就无窗口了;窗口看门狗的时钟来源PCLK1(APB1总线时钟)分频后。

    转载请注明原文地址: https://ju.6miu.com/read-6099.html

    最新回复(0)