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

STM32配置注意事项

1 定时器

1.1 定时器中断配置

定时器中断配置步骤
1)使能定时器时钟
HAL 中定时器使能是通过宏定义标识符来实现对相关寄存器操作的,方法如下:__HAL_RCC_TIMx_CLK_ENABLE(); /* x=1~14 */
2)初始化定时器参数,设置自动重装值,分频系数,计数方式等
定时器的初始化参数是通过定时器初始化函数 HAL_TIM_Base_Init 实现的。
注意:该函数会调用: HAL_TIM_Base_MspInit 函数,我们可以通过后者存放定时器时钟和中断等初始化的代码。
3)使能定时器更新中断,开启定时器计数,配置定时器中断优先级
通过 HAL_TIM_Base_Start_IT(该函数调用了__HAL_TIM_ENABLE_IT__HAL_TIM_ENABLE 两个函数宏定义,分别是更新定时器中断和使能定时器的宏定义) 函数使能定时器更新中断和开启定时器计数。
通过 HAL_NVIC_EnableIRQ 函数使能定时器中断,通过 HAL_NVIC_SetPriority 函数设置中断优先级。
4)编写中断服务函数
定时器中断服务函数为:TIMx_IRQHandler,当发生中断的时候,程序就会执行中断服务函数。 HAL 库为了使用方便,提供了一个定时器中断通用处理函数 HAL_TIM_IRQHandler,该函数又会调用 HAL_TIM_PeriodElapsedCallback 等一些回调函数, 需要用户根据中断类型选择重定义对应的中断回调函数来处理中断程序。

通过cubemx配置:

MX_TIM1_Init --> HAL_TIM_Base_Init(配置定时器基本时基单元) --> HAL_TIM_Base_MspInit(开启定时器时钟,配置定时器NVIC中断初始化及其使能),可在MX_TIM1_Init函数末尾通过使能定时器更新中断和开启定时器计数( HAL_TIM_Base_Start_IT )

更新中断(Update Interrupt) 是定时器最基本和常用的中断类型,也称为溢出中断周期结束中断

1.2 高级定时器

1.2.1 死区互补输出

高级定时器配置可以参考正点原子高级定时器配置
注意事项:
1、勾选使能刹车输入,将对应引脚改为下拉模式,浮空输入可能导致pwm波形不能正常输出。

1.2.2 参数说明

CHN Polarity 用于配置互补输出通道电平极性,这里我们选择为 Low,即低电平有效;
CH Polarity 输出极性,这里我们选择 Low,即低电平有效;
CH Idle State 用于配置通道的空闲状态的电平,这里默认选择 Set 为低电平;
CHN Idle StateSet 用于配置互补输出通道的空闲状态的电平,这里默认选择 Reset 为高电平。
刹车输入接高电平后通道输出状态对应这里的空闲状态。

2 ADC配置

通过 EOC 位的状态来判断 ADC 转换是否完成

    

     
连续转换模式配合DMA使用
扫描模式在多通道中使用

3、串口配置步骤

串口中断配置步骤:

1) 串口参数初始化(波特率、字长、奇偶校验等)
HAL库通过调用串口初始化函数 HAL_UART_Init 完成对串口参数初始化。
注意:该函数会调用:HAL_UART_MspInit 函数来完成对串口底层的初始化,包括:串口及 GPIO 时钟使能、 GPIO 模式设置、中断设置等。
2)使能串口和 GPIO 口时钟
使用 USART1 串口,则 PA9 和 PA10 作为串口的 TX 和 RX 脚,因此需要先使能USART1 和 GPIOA 时钟。参考代码如下:

__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();

3) GPIO 模式设置(速度,上下拉,复用功能等)
GPIO 模式设置通过调用 HAL_GPIO_Init 函数实现,详见本例程源码。
4)开启串口相关中断,配置串口中断优先级
使用 HAL _UART_Receive_IT 函数开启串口中断接收,并设置接收 buffer 及其长度。通过 HAL_NVIC_EnableIRQ 函数使能串口中断,通过HAL_NVIC_SetPriority 函数设置中断优先级。5)编写中断服务函数
串口 1 中断服务函数为: USART1_IRQHandler,当发生中断的时候,程序就会执行中断服务函数。 HAL 库为了使用方便,提供了一个串口中断通用处理函数 HAL_UART_IRQHandler,该函数在串口接收完数据后,又会调用回调函数 HAL_UART_RxCpltCallback ,用于给用户处理串口接收到的数据。
需要在 HAL_UART_RxCpltCallback 函数实现数据接收处理
6)串口数据接收和发送
最后我们可以通过读写 USART_DR 寄存器,完成串口数据的接收和发送, HAL 库也给我们提供了: HAL_UART_Receive HAL_UART_Transmit 两个函数用于串口数据的接收和发送
大家可以根据实际情况选择使用那种方式来收发串口数据。

注意:串口接受buffer接受到一个字节触发中断

硬件中断↓
USARTx_IRQHandler()↓
HAL_UART_IRQHandler(&huart1)↓
huart->RxISR(huart) -> HAL_UART_RxCpltCallback(huart)

由于一开始通过HAL_UART_Receive_IT 开启接收中断,该函数内部将huart->RxISR函数指针指向HAL_UART_RxCpltCallback。

在实际中可以重写 HAL_UART_IRQHandler 完成串口接收,可以将HAL_UART_IRQHandlerHAL_UART_RxCpltCallback 写成一个函数。

串口中断类型:STM32的串口(USART)常见的中断类型及其功能
串口详细介绍:https://www.cnblogs.com/artlessist/p/18926038 
空闲中断:从最后一个字节的停止位开始计时,如果线路保持高电平(空闲状态)达到1个完整字节的传输时间,则触发空闲中断(用于检测数据帧的结束,常用于接收不定长数据。)

4、SPI配置步骤

注意:HAL_SPI_Transmit内部调用了__HAL_SPI_ENABLE使能SPI外设(同串口一样)

http://www.dtcms.com/a/594536.html

相关文章:

  • 做中国菜的外国网站网站建设与设计ppt模板下载
  • 东莞模板网站制作哪家好江苏省造价信息工程网
  • 常用数学函数详解:从基础运算到图形学应用
  • 杭州网站改版公司兰州网站设计公司排名
  • vcpkg安装包报错 错误 TRK0005: 未能找到: rc.exe ,系统找不到指定的文件问题解决
  • 旅游网站模板免费室内设计联盟论坛官网
  • wordpress 用户名 密码合肥seo网站多少钱
  • 11.10 脚本网页 中国象棋2版
  • 基于站点的网络营销方法app开发多少钱
  • 无忧网站建设费用做一个手机app大概需要多少钱
  • winlogon!SASWndProc函数分析之win+L键的处理
  • Uni-app条件编译(// #ifndef APP)
  • 做网站为什么很复杂建好网站是不是还得维护
  • 非专业人士可以做网站编辑的工作吗WordPress文章生成图片
  • 平凉市城乡建设局网站让别人访问自己做的网站
  • 企业经营异常信息查询接口分享、技术文档
  • seo网站分析报告网站分享的功能怎么做
  • idae快捷键
  • 推荐西安优秀的响应式网站建设公司教务管理系统下载
  • 企业部署智能决策系统成本高吗?
  • PCB之电源完整性之电源网络的PDN仿真CST---06
  • 搭建一个简单的springcloud服务
  • 重庆科技网站建设婚纱摄影哪家好
  • 不让Django DRF ListAPIView 类进行2次查询
  • HarmonyOS:弹性布局(Flex)
  • CANN在智能视频分析场景中的实践应用
  • 基于ESP32的宠物喂食小屋
  • 西昌有做网站的公司吗海南网站设计公司
  • Prometheus实战教程 - 服务发现
  • 卸载搜狗压缩软件