当前位置: 首页 > news >正文

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):

图片消失了
http://www.xdnf.cn/news/527491.html

相关文章:

  • PyMOL结构对齐方式
  • 我的食物信使女友
  • 操作符的详解
  • Google机器学习实践指南(训练与损失函数篇)
  • 避开封禁陷阱:动态IP在爬虫、跨境电商中的落地实践
  • 网络安全之大模型隐私攻击技术
  • 使用 OpenCV 实现 ArUco 码识别与坐标轴绘制
  • OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()
  • 耗时十分钟,做了一个 uniapp 灵感泡泡机
  • 【QT】一个界面中嵌入其它界面(三)
  • DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成
  • 系统安全及应用学习笔记
  • MySQL数据库基础 -- SQL 语句的分类,存储引擎
  • 系统安全应用
  • 【C++】map和multimap的常用接口详解
  • flask蓝图的导入与注册
  • VS2017编译librdkafka 2.1.0
  • 【语音克隆Open Voice的使用】
  • mysql的安装方式
  • 【成品设计】基于STM32的环境监控系列
  • labview硬件开发板——LED流水灯
  • 微服务项目->在线oj系统(Java版 - 4)
  • 【Windows系统】向量数据库Milvus安装教程
  • MySQL - 如何突破单库性能瓶颈
  • vue Element-ui对图片上传和选用时的比例控制
  • C+++STL(一)
  • 自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)
  • Flink概述
  • 问题 | 代码审查:函数是否包含返回语句
  • C++11特性