stm32week16

stm32学习

十一.中断

4.使用中断

图片消失了

EXTI的配置步骤:

  1. 使能GPIO时钟
  2. 设置GPIO输入模式
  3. 使能AFIO/SYSCFG时钟
  4. 设置EXTI和IO对应关系
  5. 设置EXTI屏蔽,上/下沿
  6. 设置NVIC
  7. 设计中断服务函数

HAL库的使用:

  1. 使能GPIO时钟:__HAL_RCC_GPIOx_CLK_ENABLE
  2. GPIO/AFIO(SYSCFG)/EXTI:HAL_GPIO_Init()
  3. 设置中断分组:HAL_NVIC_SetPriorityGrouping,此函数仅需设置一次
  4. 设置中断优先级:HAL_NVIC_SetPriority
  5. 使能中断:HAL_NVIC_EnableIRQ
  6. 设计中断服务函数:EXTIx_IRQHandler,中断服务函数,清中断标志

STM32仅有:EXTI0~4、EXTI9_5、EXTI15_10,7个外部中断服务函数

十二.串口

1.通信基础

单工/半双工/全双工通信:

图片消失了

波特率:

  1. 比特率:每秒传送的比特数,单位bit/s
  2. 波特率:每秒传送的码元数,单位Baud
  3. 比特率 = 波特率 * log2M,M表示每个码元承载的信息量
  4. 二进制系统中,波特率数值上等于比特率

常见的串行通信串口

图片消失了

2.串口

串行通信接口:指按位发送和接收的接口。如:RS-232、422、485
RS-232现在逐渐被USB、无线网所取代
RS-232电平不能与COMS/TTL电平直接交换信息
现代设备常通过 USB转RS-232芯片实现兼容

图片消失了

3.UART/USART

一个是通用异步收发器,一个是通用同步异步收发器
常用的也是异步通信
如何区分UART/USART和其它通信:TX和RX交叉相连

USART的框图简化版:

图片消失了

设置UART/USART波特率:

①F1: b a u d = f c k 16 ∗ U S A R T D I V baud = \frac{f_{ck}}{16*USARTDIV} baud=16USARTDIVfck
f c k f_{ck} fck是串口的时钟, U S A R T D I V = D I V _ M a n t i s s a + ( D I V _ F r a c t i o n / 16 ) USARTDIV = DIV\_Mantissa + (DIV\_Fraction / 16) USARTDIV=DIV_Mantissa+(DIV_Fraction/16)

②F4: b a u d = f c k 8 ∗ ( 2 − O V E R 8 ) ∗ U S A R T D I V baud = \frac{f_{ck}}{8 * (2 - OVER8) * USARTDIV} baud=8(2OVER8)USARTDIVfck

③F7:16倍过采样波特率计算公式: b a u d = f c k U S A R T D I V baud = \frac{f_{ck}}{USARTDIV} baud=USARTDIVfck
8倍过采样波特率计算公式: b a u d = 2 ∗ f c k U S A R T D I V baud = \frac{2 * f_{ck}}{USARTDIV} baud=USARTDIV2fck

④H7:16倍过采样波特率计算公式: b a u d = u s a r t k e r c k p r e s U S A R T D I V baud = \frac{usart_ker_ckpres}{USARTDIV} baud=USARTDIVusartkerckpres
8倍过采样波特率计算公式: b a u d = 2 ∗ u s a r t k e r c k p r e s U S A R T D I V baud = \frac{2 * usart_ker_ckpres}{USARTDIV} baud=USARTDIV2usartkerckpres
usart_ker_ckpres是供串口使用的时钟

在Cube生成的代码中,我们实现业务逻辑的代码是写在回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
    // 1. 判断是否为USART1触发的回调(支持多UART实例)
    if (huart->Instance == USART1) {
        // 2. 接收完成后,设置标志位(轻量级操作,避免中断内耗时)
        rx_complete_flag = 1;
        
        // 3. 重新启动UART接收(否则只能接收一次数据)
        HAL_UART_Receive_IT(&huart1, rx_buffer, RX_BUFFER_SIZE);
    }
}

4.寄存器介绍

控制寄存器1(CR1):

图片消失了

控制寄存器2(CR2):

图片消失了

控制寄存器3(CR3):

图片消失了

数据寄存器(DR):

图片消失了

状态寄存器(SR):

图片消失了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值