完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32—HAL库 笔记
一、led点灯 1、输出电平 HAL_GPIO_WritePin(GPIOx,uint16_t GPIO_Pin,GPIO_PIN_SET|GPIO_PIN_RESET); 2、翻转电平 HAL_GPIO_TogglePin(GPIOx,uint16_t GPIO_Pin); 注意:stm32f1103c8tx LED2 是PB9,LoRa使用的是PA3 3、电平输入函数 GPIO_PinState HAL_GPIO_ReadPin(GPIOx,uint16_t GPIO_Pin); 二、按键开发 按键信号的识别:一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。 在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平。 1、为什么去抖动:按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。 2、如何去抖动:首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。 3、以STM32f103zet6为例 KEY0--------设置为上拉 KEY1--------设置为上拉 KEY2--------设置为上拉 KEY_UP--------设置为下拉 在未知按键电路时建议设置为浮空输入 三、中断系统 1、中断、中断源、中断向量、中断优先级、中断服务函数… 2、ARM Cortex M3内核支持256个中断,包括16个内核中断和240个外设中断,拥有256个中断优先级别。 3、STM32**的中断通道可能会由多个中断源共用。这就意味着,某一个中断服务函数也可能被多个中断源所共用。所以,在中断服务函数的入口处,需要有一个判断机制,用以辨别是那个中断触发了中断。 4、STM32中有2个优先级的概念:抢占优先级和响应优先级,每个中断都需要指定这两种优先级。 5、Cortex M3内核中有一个称为嵌套向量中断控制器(NVIC )的设备,对中断进行统一的协调和控制。其中最主要的工作就是控制中断使能和确定中断优先级。 1、STM32的外部中断 1、外部中断EXTl是STM32芯片实时处理外部事件的一种机制,由于中断请求来自GPIO端口的引脚,所以称为外部中断。 2、STM32芯片有16个外部中断源EXTI0~EXT|15, 分别对应着7个中断向量,也就是对应着7个中断服务函数。 EXTI0、EXTl1、EXT|2、 EXTI3、 EXTI4:专用。 EXTI5~EXTI9:共用。 EXTl10~EXTI15:共用。 3、EXTI0的连接引脚是: PA0~PG0,即每个端口组的0号引脚。以此类推。 4、外部中断触发条件:上升沿触发、下降沿触发或双边沿触发。 注意:不能配置成高电平触发和低电平触发。 2、基于STM32CubeMX的外部中断设计步骤: 1、在STM32CubeMX中指定引 脚,配置中断初始化参数。 2、重写该I/O引脚对应的中断回调函数。 3、中断初始化配置 将GPIO设置为: GPIO_ EXTl功能。 设置中断触发条件:上升沿、下降沿、上升沿或下降沿。 使能相关的NVIC通道。 四、定时器 1、STM32常见的定时器资源 系统滴答定时器 SysTick 看门狗定时器 WatchDog 实时时钟 RTC 基本定时器:TIM6、TIM7 通用定时器:TIM2、TIM3、TIM4、TIM5 可以实现输出比较、输入捕获、PWM生成、单脉冲模式输出 高级定时器:TIM1、TIM8 2、通用定时器知识点 STM32的通用定时器是一个通过可编程预分频器( Prescaler )驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。 通用定时器的基本工作原理: 首先,定时器时钟信号送入16位可编程预分配器(Prescaler) ,该预分配器系数为0~65535之间的任意数值。预分配器溢出后,会向16位的主计数器(Counter Period)发出-一个脉冲信号。 预分频器,本质上是一个加法计数器,预分频系数实际上就是加计数的溢 出值。。 定时器发生中断时间的计算方法: 定时时间= (Prescaler+1 ) X (Counter Period+1) X 1/定时器时钟频率 时钟信号1KHz,Prescaler为9 ,Counter Period为999,定时时间? 3、基于STM32CubeMX中TIM的步骤: 1、设置Clock Source 时钟源 2、设置Prescaler 和 Counter Period参数 3、设置NVIC嵌套向量中断控制器 时钟信号32MHz,每隔500ms翻转一次输出电平 4、中断服务函数编写 五、串口通信 1、知识点 1、并行通信和串行通信 2、单工、半双工、全双工 3、 异步串行通信:通信双方在没有同步时钟的前提下,将-一个字符(包括特定的附加位)按位进行传输的通信方式。波特率:每秒钟传输的二进制位数,如9600bps. 4、波特率:每秒传输的二进制位数,如9600bps 5、TTP电平《-----》RS232:MAX3232 SP3232 串口《-------》USB接口:CH340 CP2012 STM32芯片的串口UASRT功能十分强大,但对于日常编程而 言,使用最多的还是异步串行通信。 USART1_ TX与PA9复用,USART1_ RX与PA10复用。 USART2_ TX与PA2复用,USART2_ RX与PA3复用。。 2、STM32CubeMX中关于USART的配置 3、HAL库中串口发送的重要函数 阻塞式发送函数(初学者,推荐使用) HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleDef**huart,* uint8_t*pData, uint16_t Size, uint32_t Timeout); 非阻塞式发送函数 HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleDef**huart,* uint8_t*pData, uint16_t Size); 发送完毕中断回调函数 void HAL_UART_TxCpitCallback(UART_HandleTypeDef*huart); void HAL_UART_TxHalfCpItCallback(UART_HandleTypeDef*huart); //发送一半时调用,根据需要 4、HAL库中串口接收的重要函数 阻塞式接收函数 HAL_StatusTypeDef HAL_UART_Receive(UART_HandleDef**huart,* uint8_t*pData, uint16_t Size, uint32_t Timeout); 非阻塞式接收函数(推荐使用) HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleDef**huart,* uint8_t*pData, uint16_t Size); 接收完毕中断回调函数 void HAL_UART_RxCpitCallback(UART_HandleTypeDef*huart); void HAL_UART_RxHalfCpItCallback(UART_HandleTypeDef*huart); 六、定时器与串口综合训练 命令帧(3个字节)的格式为: 0xBF为帧头 0xFB为帧尾,控制字节的定义如下: 0xA1:打开LED2,返回信息“XX:XX:XX LED2打开。” 0xA2:关闭LED2,返回信息“XX:XX:XX LED2关闭。” 其他:返回信息“XX:XX:XX这个一个错误命令!“ 关于sprintf()函数用法: sprintf(),指的是字符串格式化函数,把格式化的数据写入某个字符串中。 int sprintf(char *string, char format [,argument…]); 引入头文件#include “stdio.h” 例:有一个表示温度的整型变量tmp,现在要将其格式化为字符串“温度是: XX摄氏度”,并将其通过串口1发送出去。 uint8_ t Str_ buff[64]; sprintf((char*)Str_ buff, “温度是: %d摄氏度”, tmp); HAL_ UART_ Transmit(&huart1, Str_ buff, sizeof(Str_ _buff), 0xFFFF); 使用到的相关配置: 定时器、串口 、LED闪灯 步骤: 1、宏定义 LED输出电平 翻转电平 2、定义 数组 时间变量 字符串缓冲数组 串口接收缓冲区 3、灯光检测 4、串口发送 HAL_UART_Transmit(&huart1,str1,sizeof(str1),10000); 5、打开定时器 HAL_TIM_Base_Start_IT(&htim2); 6、串口发送回调函数 void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) 7、串口接收 HAL_UART_Receive_IT(&huart1,Rx_data,3);非阻塞式 串口接收缓冲区 3、灯光检测 4、串口发送 HAL_UART_Transmit(&huart1,str1,sizeof(str1),10000); 5、打开定时器 HAL_TIM_Base_Start_IT(&htim2); 6、串口发送回调函数 void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) 7、串口接收 HAL_UART_Receive_IT(&huart1,Rx_data,3);非阻塞式 8、串口接收回调函数 void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
521浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:26 , Processed in 0.854749 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号