随笔分类 - STM32
摘要:用 STM32CubeMX 快速生成一个 SD 卡读写程序 前提:默认已经装好 MDK V5 和 STM32CubeMX。 硬件平台: STM32F4xx 系列,并通过 SDIO 连接 SD 卡。Step1.新建工程 选择芯片型号。 Step2.配置时钟引脚 Step3.配置 SDIO 为 SD 4
阅读全文
摘要:这里记录一下用STM32Cumebx实现USB虚拟串口的过程,以F072为例大家可以一起学习讨论一下。 1.新建工程 这里选择SW烧录调试,看个人习惯,如果不习惯用SW的你们可以换其他的也行。 我这里因为直接使用MCU的内部时钟就没有勾选RCC了,然后直接配置时钟树,具体如下: 最后一点比较重要点的
阅读全文
摘要:关于利用中断实现串口不长接收,最近发现了一种HAL版的方法,实现的方法跟我另一篇博客(https://www.cnblogs.com/xingboy/p/10154475.html)的方法类似,不过这个方法更加便捷,完全利用HAL库,下面说一下具体的实现方式。 1、使用STM32CubeMx建立一个
阅读全文
摘要:1、情景描述: 最近在做一个项目,X86的上位机通过串口控制MCU,使用串口中断接收上位机数据时,MCU在上电的情况下烧录程序,可以正常接收上位机的数据,在断电重启后,一直进入不了中断回调函数,上电的情况是X86上电,MCU也同时上电。 2、原因分析: 造成这个的原因是因为硬件上电的时候,因为X86
阅读全文
摘要:最近一个项目用到了MODBUS协议,就学习了一下,这里做一下记录以免后续忘记。 要用到MODBUS肯定要先知道是MOBUS协议,这里呢我们就又要先理解协议的含义了。 所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。现在就来定义一个新的最简单协议。 例如: 协议: “A”--“LE
阅读全文
摘要:Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area)
阅读全文
摘要:中断回调函数是在某个中断发生完成之后调用的,在用Cubemx生成的代码中,其实已经有生成中断回调函数了的,不过那个我们可以不用管,自己在项目里重写中断回调函数以及程序逻辑即可。 从上图我们可以看到,自动生成的代码中,中断回调函数都有一个__weak 关键字,加上了__weak 修饰符的函数,用户可以
阅读全文
摘要:本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取
阅读全文
摘要:一、非DMA模式(转) 说明:这个是自己刚做的时候百度出来的,不是我自己做出来的,因为感觉有用就保存下来做学习用,原文链接:https://blog.csdn.net/qq_24815615/article/details/70227385,下面第二部分我会补充自己的DMA模式的方法。 Stm32
阅读全文
摘要:以前用DMA实现接收不定长数据,DMA的方法接收串口助手的数据,全部没问题,不过如果接收模块返回的数据,而这些数据如果包含回车换行的话就会停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT\r,导致没有接收完成,具体原因还没搞懂,有了解的,希望可以告知一下,DMA不定长接收方法传输门:h
阅读全文
摘要:STM32的ADC转换还是很强大的,它具有多个通道选择,这里我就不细说,不了解的可以自行百度,这里只是选取单通道,实现ADC转换。在文章开始之前,我说一下数据左对齐跟右对齐的差别,以前一直糊里糊涂的,记录下来以免以后自己忘记。12位二进制最大值为 0x0FFF 左对齐操作后的结果是 0xFFF0,右
阅读全文
摘要:这里记录一下如何做一个USB下位机,这里主要分3部分:1、建立工程;2、添加报文描述符;3、数据的传输。这里就不讲USB的理论知识了,有想要了解的百度一下就可以了。 建立工程:工程建立参考:https://www.cnblogs.com/libra13179/p/7193375.html 1、首先打
阅读全文
摘要:这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现。 1、建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2、配置时钟,我这里配的是内部时钟,没有配外部时钟,而且不是最大时钟,有需要的可以自己改 3、配置定时器,这里的话默认就可以,因为代码里
阅读全文
摘要:最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记。 以建立一个定时1mS定时器为例: 1、先打开定时器 2、配置好时钟 3、配置定时器设置 重点来了,以前在这里我一直以为这里配置的就是时间,然后在调频率的时候,一直不对劲,知道查阅了硬石的资料才发现,这里配置的是
阅读全文
摘要:最近做了个USB跟上位机的通信,需要软件对MCU进行复位,复位后如果USB没有拔插,PC就不会重新枚举USB为了解决这个问题,我做了软件复位跟,软件模拟USB拔插。 1、软件复位 这里我用的是HAL库的软件复位,复位前先把中断关掉,再复位,在你需要复位的代码处添加下面代码即可,代码如下: __set
阅读全文
摘要:参考:https://blog.csdn.net/u014470361/article/details/79206352 我这里使用的芯片是 F1 系列的,主要是利用 DMA 数据传输方式实现的,在配置工程的时候要注意配置好 DMA,并开启中断。 如果出现数据长度对,可是数据接收不完整,把Memor
阅读全文
摘要:参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HAL库的硬件IIC要比标准库的稳定。好了,下面就从STM32CubeMx 配置开始一步步实现IIC通讯
阅读全文
摘要:重映射就是将引脚功能重新定义到其他引脚, 例如PA9是USART1-TX默认的 管脚,但是现在PA9用做它用了,那可以将USART1-TX重新映射到PB6,当然这 种映射不是随意的想映射到哪个脚就哪个脚,芯片内部已经固定了只能映射到固 定的地方。 eg: 标准库重映射步骤为:(把串口PA9、PA10
阅读全文
摘要:IIC具体是什么这里我就不细说了,只收集一些关于IIC的原理。 IIC总线优点是节约总线数,稳定,快速, 是目前芯片制造上非常 流行的一种总线,大多数单片机已经片内集成了IIC总线接口,无 需用户自己模拟,只需配置相关寄存器即可使用。 IIC总线有两条串行线,其一是时钟线SCK,其二是数据线SDA。
阅读全文
摘要:1 #ifndef _IIC_H 2 #define _IIC_H 3 4 #include "stdio.h" 5 #include "stm32f1xx_hal.h" 6 7 8 /* 定义控制 SDA SCL 的宏 标准库版 9 #define I2C_SDA_UP GPIO_SetBits
阅读全文