![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
基于HAL库的STM32一些常见应用
无乐不作Cypher
2019年毕业于广东技术师范大学,2019年任职深圳市创元微电子科技有限公司电子工程师(研发岗),2020年英国利兹大学机器人专业在读硕士。
本科曾获中国机器人大赛二等奖,无人机省级立项项目,优秀毕业设计(基于OPENCV的眼睛控制系统),专利1项,国内期刊1项。热爱无人机、机器人、无人驾驶、VR和AR等高科技技术,以后发展方向也在此。
希望和大家一起学习一起进步!
展开
-
STM32对HAL库的SPI接口程序
查看相应设备SPI接口的时序,确定从设备要求。我们的master模式要根据从设备的时序要求来设置参数,才能正常访问设备。例如这个:从设备要求,1、时钟空闲时为高电平;2、数据在时钟下降沿跳变,上升沿稳定,第2个沿为数据采样点;3、高位先发送;4、数据长度8位;所以在CubeMx中应该设置为:最后增加读写函数://SPI2,master模式,读写一个字节...原创 2020-05-23 16:10:00 · 2474 阅读 · 3 评论 -
基于HAL库的STM32定时器单脉冲控制
这里的单脉冲控制是指在PWM下产生指定个数的脉冲。先在CubeMx中按照PWM进行配置。定义一个变量表示脉冲个数。uint8_t PWMnum = 5;开启PWM中断。HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_1);定义脉冲完成回调函数。 uint8_t cnt = 0;void HAL_TIM_P...原创 2020-05-23 13:55:00 · 2163 阅读 · 0 评论 -
STM32中APB1和APB2控制对应表
STM32中APB1和APB2控制对应表分类APB1电源接口UART2、UART3CANTIM2、3、4SPI2IIC1、IIC2看门狗USBAPB2GPIO_A-EUSART1ADC123TIM1、8SPI1ALL...原创 2020-05-22 11:24:00 · 1954 阅读 · 0 评论 -
STM32的按键方法
按键可以用按键扫描的方法和外部中断的方法。外部中断看前面,个人推荐使用外部中断更好。其余情况可以用按键扫描,这里只讲按键扫描的方法。先在main.h中定义按键名称#define KEY0 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5) //KEY0按键PC5#define KEY1 HAL_GPIO_ReadPin(GP...原创 2020-05-22 08:58:00 · 4149 阅读 · 0 评论 -
STM32对HAL库的串口不定长度的读写操作(三)
关于利用中断实现串口不定长接收,还可以使用串口通讯协议来控制读写的长度。先设定停止结束标志位为0x02(自定义)。新建一些数组备用:uint8_t value; //进入中断接收数据的变量 或 uint8_t value[1];uint8_t getBuffer[50]; //保存接收到的数据的数组uint8_t countOfGetBuffer = 0; ...原创 2020-05-21 09:19:00 · 557 阅读 · 0 评论 -
STM32-FATFS 读写SD卡
https://blog.csdn.net/qutiezhu/article/details/52373260原创 2020-05-12 17:42:00 · 296 阅读 · 0 评论 -
基于HAL库STM32的FSMC驱动8位TFTLCD屏
先上代码。main.c:/* USER CODE BEGIN Header *//** ****************************************************************************** * @file : main.c * @brief : Main program b...原创 2020-05-12 10:37:00 · 2979 阅读 · 7 评论 -
STM32的BOOT0 BOOT1的选择
在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=xBOOT0=0从用户闪存启动,这是正常的工作模式。BOOT1=0BOOT0=1从系统存储器启动,这种模式启动的程序功能由厂家设置。BOOT1=1BOOT0=1从内置SRAM启动,这种模式可以用于调...原创 2020-05-11 16:45:00 · 1216 阅读 · 0 评论 -
STM32对HAL库的LCD驱动移植
这是正点原子TFTLCD的驱动通过CubeMx的简单工程进行移植并且点亮屏幕。首先需要看原理图,将涉及到的IO口添加进定义中,手动添加亦可。其次,工程需要添加mylcd.c, mylcd.h,和字库文件font.h。mylcd.c#include "mylcd.h"#include "stdlib.h"#include "font.h" #include ...原创 2020-03-11 16:38:00 · 3440 阅读 · 2 评论 -
stm32对HAL库的DAC使用
在cubemx中的设置。默认即可。在main中添加代码。HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048);在main()函数中添加程序设置DAC输出的数据为12位右对齐,数值为2048.则实际输出的电压为2048/4096x3.3V=1.65V,使能ADC通道2开始转换。然后开启d...原创 2019-12-14 09:21:00 · 3657 阅读 · 0 评论 -
STM32对HAL库的ADC(多通道DMA)
多通道的adc就是检测多个通道的电压值,用dma来检测。cubemx中设置如下。Number of conversion 的个数就是该adc中要使用的通道数。在下面的rank中设置通道的采样时间和通道名字。使能adc的中断。在DMA设置中设置模式为循环模式,不然不设置的话只能用一次DMA。数据宽度为一个字节,不然后面开启...原创 2019-12-13 19:47:00 · 7440 阅读 · 3 评论 -
STM32对HAL库的ADC(单通道非DMA)
在cubemx中进行设置。模式设置成Independent mode, Date Alignment设置为数据右对齐。右对齐跟左对齐的区别:12位二进制最大值为 0x0FFF 左对齐操作后的结果是 0xFFF0,右对齐后还是0x0FFF。反过来看 ,若寄存器里左对齐的数据值X (相当于实际数据*16,所以左对齐转换的值要/16才是实际的值),则X>>4才是实...原创 2019-12-05 17:20:00 · 1194 阅读 · 0 评论 -
STM32 fputc函数(重定向)
在需要用到显示功能的代码中,用printf写法会快很多。struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x = x; } //重定义fputc函数 int fputc(int ch, FILE *f){ ...原创 2019-11-28 17:13:00 · 3876 阅读 · 0 评论 -
STM32的HAL库DMA串口不定长度的读写操作(二)
上一次我们通过HAL库的串口中断回调函数,基本能够实现简单的不定长度读写收发的功能。这一次用DMA来实现,先了解一下DMA。DMA直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。DMA详解传送门:https://blog.csdn.net/Cheatscat/artic...原创 2019-11-28 16:44:00 · 769 阅读 · 0 评论 -
STM32对HAL库的PWM控制
要实现的是用PWM实现呼吸灯的效果。先简单说一下原理,比如对一个电灯来说,你在1秒内,打开开关0.5秒,再关闭0.5秒,如此反复,那么电灯就会闪烁,但是如果是1毫秒内,0.5毫秒打开,0.5毫秒关闭,由于视觉暂留作用,也可能由于灯光的亮灭速度赶不上开关速度(还没全亮就又没电了),于是人眼不感觉电灯在闪烁,而是感觉灯的亮度少了一半。同理,如果是0.1毫秒开,0.9毫秒灭,感觉灯的亮度就只...原创 2019-11-18 16:51:00 · 9842 阅读 · 2 评论 -
STM32对HAL库的定时器中断
从串口中断,到外部中断再到现在的定时器中断,越来越感觉HAL库应用比较好用,虽然一开始理解上面有点怪,但是网上查询一下就能够学会。定时器中断分为两个重点,1、在应用CUBEMX时配置定时器的分频数以及时钟树设置 2、生成初始化代码后添加的相关函数auto-reload 自动重装值,使能与否都可以,因为计数器溢出后会自动重装。1.在CUBEMX中的时钟树很好去理...原创 2019-11-15 16:12:00 · 4022 阅读 · 0 评论 -
STM32对HAL库的串口不定长度的读写操作(一)
这几天终于开始接触HAL库,随着固件库被逐渐淘汰,尽管很多人说用STM32CUBEMX不能很好地学习stm32,但这肯定是一个趋势,所以用好HAL库十分得重要。 这几天也学到了简单地操作cubemx这个软件,这里不做教学,因为百度很多,虽然很杂乱,但是总能找到的。HAL库的应用与固件库在一些特定函数上不一样。举几个我目前遇到的例子。 再弄跑马灯时需要用到翻转的程序,...原创 2019-11-14 20:51:00 · 434 阅读 · 0 评论 -
STM32对HAL库的外部中断处理
这次外部中断是通过检测外部中断实现按键控制LED的开关。每一个IO口都可作为外部中断口,将你要外部中断的IO口在CUBEMX中进行设置。中断线能够自动识别,不用手动去改动。其他基本设置好之后,即完成了外部中断的初始化。此时要进入中断函数,印象中大家的外部中断函数应该是这个,但是在HAL库文件中有此函数的描述,即它会执行一个外部中断的回调函数。在库文件...原创 2019-11-15 14:07:00 · 1729 阅读 · 0 评论 -
STM32 IIC协议 HAL库
IIC是多主、多从、单工IIC的串行总线,传输仅需两根线,SDA(数据线)、SCL(时钟线)IIC空闲时SDA和SCL都处于高电平状态(两根线一般情况均接上拉电阻)IIC传输数据的模式为每传输8位后,要通过一个ACK位进行相互确认。个人认为SCL产生上升沿后,设备开始检测SDA的电平,当SDA下降,SCL为高,表示开始工作,以此作为当前传输的数据,SCL的下降沿是作为SDA信息...原创 2020-04-27 17:36:00 · 892 阅读 · 0 评论 -
STM32对HAL库的输入捕获应用
基本方法1.设置TIM2CH1为输入捕获功能;2.设置上升沿捕获;3.使能TIM2CH1捕获功能;4.捕获到上升沿后,存入capture_buf[0],改为捕获下降沿;5.捕获到下降沿后,存入capture_buf[1],改为捕获上升沿;6.捕获到上升沿后,存入capture_buf[2],关闭TIM2CH1捕获功能;7.计算:capture_buf[2]...原创 2020-05-22 17:23:00 · 1251 阅读 · 0 评论