Bootstrap

STM32外部中断、定时器、USART和UART回顾

STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道,系统 异常10 个,除了个别异常的优先级被定死外,其它异常的优先级都是可编程的

中断和事件的区别

产生中断CPU需要去响应,产生事件CPU不一定要去做些什么动作去响应它,
一般情况下用的最多的是中断,事件的话CPU是自己内部去处理一些错误的动作
外部中断配置流程
  1. 开启SYSCFG外设对应的时钟

  2. 选择对应的外部中断线,例如将按键PE2(KEY2)接入到中断线路中来

  3. EXTI中断配置

        EXTI_InitStructure.EXTI_Line = EXTI_Line2;              //选择引脚
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     //选择中断模式
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿触发
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
  4. NVIC配置

        NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    

 

基本定时器

STM32F4 定时器分类(共14个):
高级定时器:TIME1 、TIME8
通用定时器: TIME2 ~ TIME5,TIM9 ~ TIM14
基本定时器: TIME6 、 TIME7

基本定时器(TIM6 和 TIM7)主要两个功能,

第一就是基本定时功能,生成时基

第二就是 专门 用于驱动数模转换器(DAC) 基本定时器(TIM6 和 TIM7)的特性包括:

● 16 位自动重载递增计数器

● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于     1 和 65536 之间

● 用于触发 DAC 的同步电路

● 发生如下更新事件时会生成中断/DMA 请求:计数器上溢


基本定时器配置流程

  1. 开启基本定时器时钟

  2. 配置时基单元

        //设置定时器周期和预分频值,目的计数1s
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=50000-1;                  //计数值
        TIM_TimeBaseStructure.TIM_Prescaler=8400-1;                //预分频
  3. 使能定时器的更新中断

  4. 配置NVIC

  5. 开启定时器

    TIM_Cmd(TIM6, ENABLE)
    

 

USART:是一种通用同步异步收发器,是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

总线信号: TX, RX, CK

简单的板内通讯,或者常见的设备调试场景,使用简单的LVTTL/TTL电平即可在两个设备间进行UART协议通讯。

在目前工业控制,流行使用的串口通讯中,一般只使用RXD、TXD 以及GND 三条信号线,直 接传输数据信号,这种方式就是UART,裁剪掉了同步信号线,只能进行异步通讯。我们平时用的串口通信基本都是UART。

UART:是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收

总线信号: TX, RX, GND

基于TTL的UART通讯
​
基于TTL的UART通讯,是USART协议应用最简单的使用场景。即直接把数字I/O输出的高低电平
​
作为实际的物理信号进行传输。在物理连接上,只需要设备共地,通过一根信号线即可完成单向的设备通讯。如果需要双向全双工,使用两根信号线即可

UART的通信线路简单,只需要三根线即可实现两个设备之间的传输,但是传输速率是最慢的。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。


USART和UART的区别

第一个区别是可以为串行数据提供时钟的方式。 UART在内部向微控制器生成其数据时钟,并通过使用起始位转换将该时钟与数据流同步。没有与数据相关的输入时钟信号,因此为了正确接收数据流,接收器需要提前知道波特率应该是什么。USART可以设置为以同步模式运行。在此模式下,发送外设将生成一个时钟,接收外设可以从数据流中恢复,而无需提前知道波特率。或者,链路将使用完全独立的线路来承载时钟信号。使用外部时钟可使USART的数据速率远高于标准UART的数据速率,最高可达4 Mbps。

第二个主要区别是外设可以支持的协议数量。 UART很简单,只提供其基本格式的一些选项,例如停止位数和偶数或奇数奇偶校验。 USART更复杂,可以以与许多不同标准协议相对应的形式生成数据,例如IrDA,LIN,智能卡,RS-485接口的驱动程序启用和Modbus等。 USART也具有与UART相同的异步功能

;