STM32
love421
个人博客地址:https://love421.github.io,但愿殊途同归,我能与你讲讲来时的路。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
开发库介绍
CMSIS库不是HAL库,也不是标准库,它是一种与厂商(比如ST公司)无关的软件层,可以在不同的微控制器上使用。标准库(Standard Peripheral Libraries)是ST公司为STM32微控制器提供的一种固件函数包,它封装了STM32所有外设的寄存器操作和中断处理,提供了一套统一、简洁、易用的API函数接口,方便开发者使用STM32的各种外设功能。LL库(Low-Layer,底层)是ST公司最近(也不是最近,六七年了)新增的一种底层库,它与HAL库捆绑发布,文档也是和HAL文档在一起的。原创 2023-10-24 23:56:23 · 909 阅读 · 0 评论 -
【FDCAN】STM32G0B1+FDCAN+HAL库调试记录
文章目录前言一、实验环境?二、CAN和FDCAN区别1.介绍2.FDCAN有哪些优点(个人角度):三、CAN发送1.STM32CubeMX配置截图:2.用户需要自己添加的内容:3.调试结果:四、CAN接受1.滤波器类型采用掩码方式:1)添加如下函数实现:2)调试结果:总结前言本文是本人以STM32G0B1为平台,记录下调试总结,仅供参考,若有不对的地方,还劳烦指正。一、实验环境?1)MCU:STM32FG0B1VCT62)CAN工具:广成CAN总线分析仪双通道can转usb模块USBCAN原创 2021-07-28 14:27:12 · 9663 阅读 · 5 评论 -
【CubeMX】外设选择LL库还是HAL库
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言以前听闻过LL库相比HAL精简,HAL库很臃肿。曾几何时想过使用LL库来降低程序固件大小,但是翻看了官方自带的参考例程发现LL库的例程少之又少,而且CubeMX生成的也是基于HAL库的,奈何一直没有找到如何生成LL库的选项。今天无意随手都点了点,看了看,结果就发现了这张图:提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:原创 2021-07-27 21:40:17 · 2197 阅读 · 0 评论 -
【STM32】解决引脚复用成PWM开漏输出峰值达不到外部上拉的电压
项目场景:因为项目的一个功能需求,需要输出一个高电平为5V的PWM。问题描述:发现输出的PWM高电平最高只有4V不到的样子,很接近于4V。实测过普通开漏输出,高电平完全可以达到外部上拉的5V。HAL库也试过了,也是完全可以达到5V的,但是标准库的配置一直上不去。 原因分析:仔细对比发现没啥异常,配的都是对的,但是可以肯定的是,肯定还是配置,因为HAL库可以实现,那就说明一定还是某个地方配的有问题。最后才知道开漏输出脚必须配置为浮空,不配置的话实测默认的是内部上拉。1.内部下拉:2.内部原创 2021-06-22 17:25:11 · 3784 阅读 · 3 评论 -
【STM32】HAL库调用HAL_SPI_Transmit出现HartFault问题
项目场景:项目场景:MDK:问题描述:HAL库调用硬件SPI发送函数HAL_SPI_Transmit会导致程序进入HartFault // flash 页大小(字节)#define FLASH_SPI_PAGE_SIZE (256)static uint8_t write_buffer[FLASH_SPI_PAGE_SIZE + 4];spi1_write(W25QXX_CHANNEL, (uint8_t *)write_buffer, (length + 4));原创 2021-05-18 16:07:48 · 6084 阅读 · 7 评论 -
【STM32】Debug下禁用看门狗
问题背景:因为工程中加入了独立看门狗IWDG,但是有时候需要硬件仿真单步调试设置个断点啥的,这时候看门狗就会因为没有及时喂狗复位,弹窗报错,整个仿真都不能继续了。实测JLINK会弹窗如下图所示,但是亲儿子STLINK没有任何弹窗…之前一直都是在debug的时候关掉看门狗宏定义,但是这样麻烦不说,会有一个隐患存在就是,真正的项目工程是需要看门狗的,我们随意关掉的话,终究会存在debug完之后忘记再重新打开看门狗的问题,所以我们最好的办法是能够在debug这个特定的条件下,冻结掉看门狗,就像低功耗下冻结看门原创 2021-01-18 15:11:24 · 9096 阅读 · 5 评论 -
【STM32】解决J-Flash烧入固件无法正常运行
项目场景:因为需求,需要通过J-Flash将两个Bin文件合并之后烧录。问题描述:合并bin文件之后,全部擦除在烧录进去程序跑不起来,不知道啥状态。原因分析:起初怀疑过合的Bin文件有问题,合了Hex文件,可是仍然一样不正常,怀疑过两份bin文件地址不对,对了对也没发现问题,最后发现默认是不复位的。解决方案:需要勾选Start application...原创 2021-01-13 20:47:43 · 3628 阅读 · 0 评论 -
【STM32】串口唤醒低功耗
项目场景:MCU:STM32G070MDK:V5.25Software Pack:Keil.STM32G0xx_DFP.1.0.0问题描述:单片机进入低功耗之后,想让另一个设备通过串口把它唤醒,可以正常唤醒,但是唤醒之后,串口收发貌似就不正常了。 原因分析:串口进入低功耗之前,是把串口的接收引脚配置为了外部中断输入脚,唤醒之后再重新配置为串口,但是这个配置流程需要正规一点,需要HAL_UART_MspInit一下才可以正常。解决方案:在唤醒之后,按如下顺序对串口重新配置:HA原创 2020-12-31 17:38:18 · 1580 阅读 · 0 评论 -
【STM32】解决加入flash擦除、读写之后程序“卡死“的问题
问题描述:工程整个函数每隔5ms刷新一次,但是一家入flash操作串口发送就有问题了,接收不到串口发送出来的数据,然后整个函数拖慢了很多。 原因分析:主函数每5ms去擦除、独写flash导致,flash操作需要时间,实测20ms操作一次就不会再有问题。解决方案:提示:这里填写该问题的具体解决方案:例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).send原创 2020-12-25 20:57:31 · 7674 阅读 · 0 评论 -
HAL库的官方历程
需求:我们以前用标准库的时候是一个压缩包,然后压缩包中有官方的历程,我们使用片上资源的时候会去参考查询,但是ST推出HAL库之后搭配的是STM32CubMX自动生成的,我们也需要参考官方历程,这时候就需要HAL库的官方历程。路径:1.打开STM32CubeMX,然后电机Help下的Updater Settings2.找到如下路径:3.然后顺着刚刚路径后面继续打开如下路径:\STM32Cube_FW_G0_V1.2.0\Projects\NUCLEOG070RB\Examples\PWR\PWR原创 2020-12-17 15:08:42 · 2427 阅读 · 1 评论 -
解决STM32单片机的ADC采样不准确偏移的问题
项目场景:用STM32CubeMX生成的ADC采样测量电压。单片机:STM32G070MDK:V5.25问题描述:采样回来的数值Debug看总是大了些许,几个通道都是这样,具体测试情况如下:实际电压值采样得到的电压值误差1.5051.5640.0592.2482.2940.0461.7491.7950.0463.2763.3010.0340.0980.1710.073 原因分析:检查发现没有ADC校准,STM32Cu原创 2020-12-17 14:56:05 · 9297 阅读 · 3 评论 -
STM32G070单片机 PD0 PB15引脚内部下拉使用需要主意
项目场景:STM23G070单片机的PD0引脚作为开漏输出的时候,外部接了一个51K上拉电阻到5V,想让PD0开漏输出高的时候是5V,开漏输出低的时候是0V。问题描述:STM23G070单片机的PD0引脚作为开漏输出的时候,外部接了一个51K上拉电阻到5V,单独测试PD0的时候是可以正常的,开漏输出高的时候5V,低的时候可以到0V,但是一旦PD1推挽输出输出高之后,情况就变了,在PD1推挽输出高情况下,PD0开漏输出高的时候却始终只有2.4V,输出低的时候是0V,正常的。 原因分析:查阅S原创 2020-12-17 14:36:54 · 1804 阅读 · 0 评论 -
解决串口开启DMA接受却只能接收到第一个字节之后就再也接受不到数据的问题
设备:单片机:STM32G070 MDK:V5.25问题描述:发现串口接受不到数据,只能接受到第一个字节。 UART4_InitVariables(); HAL_Delay(200); HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE); 原因分析:在单片机执行完串口初始化之后,并没有立马开启DMA接收,在这个时间差之内如果有数据发过来就会导致这个问题解决方案:在完成串口初始化原创 2020-12-16 20:06:16 · 7694 阅读 · 7 评论 -
【STM32】外部中断不可以同PIN
问题背景:在做低功耗外部中断唤醒的时候,发现PD2配置成外部中断唤醒之后,之前配置的PB2不可以正常唤醒了,注释掉PD2的外部中断GPIO配置之后,又可以正常唤醒。问题原因:查阅资料发现STM32的外部中断即使是不同PORT,但是只要是同PIN也是不可以同时配置为外部中断使用的。我们看STM32CubeMX发现配置的时候也是配置不了的,是互斥的。 STM32外部中断不可以共用PIN原创 2020-12-10 13:33:18 · 936 阅读 · 3 评论 -
示波器分析IIC波形图
测试设备:1.MCU:STM32G02.IIC设备:lis2dh12(ST的三轴加速度计)3.示波器:普源RIGOL DS1054Z知识点:1.开始信号:SCL在高电平期间,SDA由高变低即为开始信号2.停止信号:SCL在高电平期间,SDA由低变高即为停止信号3.应答信号ACK: 八位数据位发送完之后,第九个时钟即是ACK,0表示有ack,1表示nack4.发送八位数据位的时候,电平变化总是发生在低电平期间,SCL为高电平器件不可以变动,只有开始信号和停止信号是在SCL为高器件变动5.空闲原创 2020-12-07 11:37:43 · 7026 阅读 · 4 评论 -
STM32低功耗(STM32G0+HAL库+STOP模式+中断唤醒)
1.进入低功耗:HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);2.进入低功耗之前需要先将外部中断唤醒配置好 GPIO_InitStruct.Pin = DATA_433M_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(DATA_433M_GPIO_原创 2020-12-01 21:36:34 · 13293 阅读 · 10 评论 -
解决低功耗之后无法下载程序
问题背景:在调试低功耗的时候,错误的将单片机一上电就进入低功耗,通过外部复位引脚让其复位,虽然可以成功,但是立马又进入了低功耗,唤醒的时间太短,毫无卵用。解决办法:因为单片机烧写的SWD口一直接的都是 VCC SWCLK SWDIO GND,想起来JLINK上面是有复位引脚的,所以找出来把它接到了单片机的外部复位引脚上即可解决。结果:...原创 2020-12-01 11:00:27 · 1190 阅读 · 1 评论 -
重构外部中断回调函数来区分外部中断具体引脚做具体对应的任务(STM32+CubeMX+HAL库+EXTI外部中断)
1.STM32CubeMX配置如下:这里GPIO mode一共有六种分别是:(1)上升沿触发外部中断(2)下降沿触发外部中断(3)边沿触发外部中断(4)上升沿触发外部事件(5)下降沿触发外部事件(6)边沿触发外部事件2.CubeMX生成的代码:/** Configure pins as * EXTI*/void MX_GPIO_Init(void){ __HAL_RCC_GPIOD_CLK_ENABLE(); //使能GPIO时钟 GPIO_InitTypeD原创 2020-12-01 10:38:49 · 1903 阅读 · 1 评论 -
示波器分析485波形图
测试设备:1.MCU:STM32G02.485芯片:3peak3.示波器:普源RIGOL DS1054Z知识点:1.A高B低:12.B高A低:03.起始信号: 由1变0一个bit时间4.停止信号: 由0变1一个bit时间5.空闲态: 一直是1(A高B低)6.发送顺序:先发送低位再发送高位,比如发送0x53(01010011),先发送低四位,再发送高四位,并且低四位发送也是先从低到高发,所以示波器看到的应该是(11001010)数据格式说明:1.波特率:48002.起始位:1位3.原创 2020-11-27 11:13:42 · 10872 阅读 · 10 评论 -
J-Link RTT的使用(原理 + 教程 + 应用 + 代码)
MCU:STM32F407VE MDK:5.29IAR:8.32目录--点击可快速直达目录写在前面什么是RTT?RTT的工作原理RTT的性能快速使用教程高级使用教程附上测试代码2019年12月27日更新--增加打印float的功能写在前面本文介绍了J-Link RTT的部分使用内容,很多地方参考和使用了J-Link的官方资料,有的地方可能翻译的不太准确,请见谅。如果想了解更加准确详细的内容,请点此处。什么是RTT?RTT(Real Time Transfer)是一种用于嵌入式中...转载 2020-11-23 13:43:27 · 6231 阅读 · 0 评论 -
STM32G0系列通过HAL库读取CPUID
STM32G070的CPUID地址:/*!< Device Electronic Signature */#define PACKAGE_BASE (0x1FFF7500UL) /*!< Package data register base address */#define UID_BASE (0x1FFF7590UL) /*!< Unique device ID register base addre原创 2020-11-17 10:40:08 · 2255 阅读 · 1 评论 -
解决MDK仿真时候弹框Programming range...问题
问题描述: debug时候弹框如下:问题分析: 打了太多断点具体操作:一键去掉所有断点即可原创 2020-10-19 14:18:10 · 1927 阅读 · 1 评论 -
STM32CubeMX配置RTC——基于(STM32G070+STM32CubeMX+HAL库+RTC)
实验目的:通过STM32CubeMX进行简单配置生成HAL库实现内部晶振RTC。一、STM32CubeMX配置如下:1.时钟树配置:因为板子没有外部RTC晶振,所以只能使用内部32KHz晶振,时钟树配置如下:2.RTC配置:(1)关于Asynchronous Predivider value 和 Synchronous Predivider value填写多少,请看下面:因为内部晶振是32KHz,所以毫无疑问应该选择LSI=32KHz即:Asynchronous Predivider原创 2020-09-09 16:02:35 · 6144 阅读 · 2 评论 -
STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL库+ADC模拟看门狗)
实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗,以达到单片机掉电保存Flash。一、STM32CubeMX配置如下:其中两个边界电压分别配置了3880和1509,当超越这个边界就会出发ADC中断,再ADC中断中保存flash即可。所以我们还需要打开ADC中断:二、生成的HAL库源码如下: /** Configure Analog WatchDog 1 */ AnalogWDGConfig.WatchdogNumber = ADC_ANALOGWAT原创 2020-09-09 09:19:02 · 4226 阅读 · 5 评论 -
STM32CubeMX配置硬件CRC——基于(Keil5+HAL库+STM32G070+STM32CubeMX+硬件CRC32)
实验目的:通过STM32CubeMX进行简单配置生成HAL库实现硬件CRC32校验的功能。一、STM32CubeMX配置如下:二、生成的HAL库源码如下:三、Debug结果如下:对字符串"DA0000000000"进行CRC32计算结果如下:四、在线工具CRC校验结果如下:完美,收工!...原创 2020-09-08 19:03:54 · 3994 阅读 · 2 评论 -
LCD驱动芯片——BL55072A驱动程序
初始化子程序:START0x7C; I2C子地址0xEA;ICSET,软件复位芯片0xC0;MODSET,关显示0xF0;BLKCTL,关闪烁0xA3;DISCTL,80Hz Line inversion,High Power mode0xE8;ICSET,清复位bit1STOP显示刷新子程序:START0x7C;I2C子地址0xF0;BLKCTL,关闪烁0xA3;DISCTL,80Hz Line inversion,High Power mode0xE8或0xEC;ICSE原创 2020-09-03 15:02:49 · 3010 阅读 · 1 评论 -
STM32单片机IAP模式不容易进入,跟上位机通讯计数很慢,IAP不能连续刷固件,IAP刷入固件时间较长等问题
问题: IAP模式不容易进入,跟上位机通讯计数很慢,IAP不能连续刷固件,IAP刷入固件时间较长。原因:IAP不容易进入和不能连续IAP的问题是因为加速度计初始化放在了串口初始化之后,而加速度计初始化需要一点时间,在连续IAP的时候,刚更新完,单片机正在重启,串口初始化刚完成,上位机跟它通信,刚开始接受上位机发来的字节,然后就开始了加速度计初始化,就导致串口接受异常,不能在正常接收,所以IAP不容易进入和不能连续IAP。通讯计数慢和下载时间过长是因为,加速度计读取时间比较长,拖慢整个IAP时间。解决办法原创 2020-08-21 14:21:11 · 720 阅读 · 0 评论 -
STM32F07xx单片机Systick配置
#include "main.h"typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;/*---------------------------------------------------------------------------- * SystemCoreClockConfigure: configu...原创 2019-11-22 17:45:50 · 396 阅读 · 1 评论 -
STM32F07xx单片机串口4配置
GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; RCC_AHBPeriphClockCmd(RCC_A...原创 2019-11-18 14:10:12 · 654 阅读 · 0 评论 -
基于STM32F0xx单片机的74HC595驱动程序
74HC595.c源文件#include "74HC595.h"void LED595Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOC , ENABLE); ...原创 2019-11-05 09:57:00 · 1351 阅读 · 0 评论 -
STM32F07xx单片机串口1重映射配置
void USART1_Config(unsigned int BaudRate){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;/************************************...原创 2019-10-29 15:45:56 · 601 阅读 · 0 评论 -
STM32F0xx的ADC配置
STM32F0xx系列单片机基于ST官方标准库V1.5.0的ADC功能的配置ADC.c文件#include "ADC.h"uint32_t ADC1ConvertedValue = 0, ADC1ConvertedVoltage = 0;void ADC_GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructur...原创 2019-10-24 18:07:33 · 3827 阅读 · 10 评论 -
解决MDK通过JLink烧写程序之后必须断电才可以运行的问题
问题描述: 烧写完程序之后必须要断电重启程序才能跑起来,很麻烦,很坑爹。解决方法: 将下图此处勾选即可。原创 2019-10-24 10:02:36 · 2446 阅读 · 1 评论 -
图文详解STM32F0xx基于标准库新建工程
之前从来没有接触过F0系列,更没有基于STM32F0标准库函数新建工程的经历,但是新建F1系列那还都是家常便饭,可是没有想到折腾了大半天才成功,最后记录一下吧。保证可以从无到有,详细记录每一个步骤。一、环境1.IDE开发环境::uVision V5.25.2.02.标准库:STM32F0xx_StdPeriph_Lib_V1.5.03.单片机:STM32F072RBT64.仿真器:JL...原创 2019-10-22 16:49:07 · 8671 阅读 · 4 评论 -
毕设分享:基于STM32两轮自平衡小车 含源码、原理图及PCB文件
毕设分享:STM32两轮自平衡小车系统设计与控制 含源码、原理图及PCB文件原创 2020-10-14 09:29:56 · 38355 阅读 · 109 评论
分享