![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
文章平均质量分 79
放学校门口见
这个作者很懒,什么都没留下…
展开
-
MDK最新版安装与和谐全过程
软件下载之前提供的注册机因为和谐时间只能到2020年,现在找了可以和谐到2032年的,这里我提供了下载链接,各位需要的话可以点击下载MDK534&注册机下载MDK安装我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能,你可以将本地的图片直接拖原创 2021-06-30 21:33:34 · 2976 阅读 · 0 评论 -
034 - STM32学习笔记 - TIM定时器(三) - 高级定时器2
当捕获通道TIx上出现上升沿时,发生第一次捕获,计数器CNT的值会被锁存到捕获寄存器CCR中,而且还会进入捕获中断,再中断服务子程序中记录一次捕获,并且把捕获寄存器中的值读取到value1中,当出现第二次上升沿时,发生第二次捕获,计数器CNT的值再次被锁存到捕获寄存器CCR中,并再次进入捕获中断,再捕获中断中,读取捕获寄存器的值到value3中,并清除捕获记录标志,如此就可以利用value3和value1的擦之计算信号周期(频率)。在边沿对齐模式下,计数器CNT只工作在一种模式,递增或者递减模式。原创 2024-01-11 21:37:22 · 1282 阅读 · 0 评论 -
033 - STM32学习笔记 - TIM定时器(二) - 高级定时器
输入滤波是为了滤除输入信号的高频干扰,即为重新采样。采样时,采样的频率必须大于等于两倍的输入信号,例如,输入信号为1M时,可能存在高频的信号干扰,为了滤除干扰,就需要将采样频率设置为2M,这样就可以把高于2M的高频干扰过滤掉,同时又能保证有效信号的采集。捕获通道和输入通道的区别在于,输入通道用于接收输入信号,而捕获通道则用来捕获输入信号的通道,一个输入通道的信号可以同时经由两个捕获通道输入,例如,输入通道TI1的信号经过滤波边沿检测器后,TI1FP1和TI1FP2可以输入到捕获通道IC1和IC2。原创 2024-01-05 22:38:25 · 1560 阅读 · 0 评论 -
032 - STM32学习笔记 - TIM定时器(一) - 定时器基本知识
在上图中,绿框中是对定时器的图标解释,黑框带阴影方框中,方框内容一般为寄存器名称,比如上面的自动重载寄存器(TIMx_ARR)和PSC(TIMx_PSC)预分频寄存器,方框加阴影效果主要是为了突出表示该寄存后面还有一个寄存器,只是这个寄存器我们无法进行操作,这里我们称之为影子寄存器,而上面我们可以操作的寄存器我们称之为源寄存器。向TIMx_PSC寄存器写入新值时,并不会马上更新CK_CNT的输出频率,需要等到更新事件发生时,把TIMx_PSC寄存器值更新到影子寄存器中,才能产生效果。原创 2023-12-23 23:10:02 · 1602 阅读 · 0 评论 -
031 - STM32学习笔记 - ADC(五) 三重ADC交替模式采集
这里以三重转换为里,三重交替采集模式顾名思义,就是通过三个ADC交叉对同一通道进行采集,假如我们使用三重模式对电位器进行模拟量采集,当ADC1在采集完成后进行数据转换时,ADC2接替进行采集,ADC2采集完成后惊醒数据转换时,ADC3再接替进行采集,依次向后类推,因此三重模式就是利用通道转换的时间差来进行采集,尽量减少转换时间对采集频率的影响以提高转换速度。如果需要提高转换速度,可以采用双重或者三重ADC,同时采集多个不同通道的数据,或者可以使用多个ADC交叉采集同一个通道的数据,这样可以提高速度。原创 2023-12-20 01:05:33 · 884 阅读 · 0 评论 -
030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集
中断模式和DMA模式进行单通道模拟量采集,这节继续学习独立模式多通道DMA采集,使用到的引脚有之前使用的PC3(电位器),PA4(光敏电阻)、PA6(悬空,可通过杜邦线接3V3或者GND进行测试)。对于ADC来说,我们使用的是一个ADC,即ADC1,所以关于ADC Common的初始化部分不需要进行修改。这里代码就不网上贴了,不清楚了可以翻看上一节的内容。这里我们在bsp_adc.c中定义一个数组,用来存放三个通道采集到的数据,再在main函数中用extern调用,再定义用来存放转换后的数组。原创 2023-11-30 20:45:50 · 662 阅读 · 5 评论 -
029 - STM32学习笔记 - ADC(三) 独立模式单通道DMA采集
2、DMA模式下,ADC会根据用户设置的采集频率对模拟量进行采集,单次采集完成后,会产生一次DMA请求,数据则会通过DMA通道送至指定的内存地址(变量)中,并不影响下次数据采集,若用户对此次采集的数据未作处理,则会被下次采集的数据覆盖。相比之下,DMA不需要中断CPU的采集工作,不需要中断服务函数,并且传输速度极快。1、中断模式下,当发生一次采集后,会触发一次中断,此时需要用户处理数据(中断),当数据(中断)处理完成后,对中断标志位置位后,才会继续下一次采集,否则不会继续采集。原创 2023-11-28 21:37:52 · 501 阅读 · 0 评论 -
028 - STM32学习笔记 - ADC(二) 独立模式单通道中断采集
滑动变阻器动触点连接到STM32的ADC通道引脚(GPIOC_3),固定触点一边接0V,一边接3.3V,因此旋转滑动变阻器调节旋钮时,动触点的电压会在0~3.3V之间变化。:ADC时钟分频系数选择,ADC时钟是由PCLK2分频而来,分频系数决定ADC时钟频率,可选的分频系数位2、4、6和8,在之前也学习过ADC的最大时钟配置为36MHz。:该成员主要用于配置ADC是否使用扫描,可选参数为ENABLE和DISABLE,如果只用到一个通道,配置为DISABLE,如果时多个通道,则选择ENABLE。原创 2023-11-22 22:28:24 · 1230 阅读 · 3 评论 -
027 - STM32学习笔记 - ADC(一) 初识
ADC指的是Analog to Digital Converter(模数转换器),即将连续变化的模拟信号转换为数字信号,常见的模拟信号有例如:压力、温度、声音等,我们可以将诸如上面说的集中通过模数转换器将其转换为更容易存储的数字信息。原创 2023-11-13 23:11:46 · 487 阅读 · 0 评论 -
026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线
用于配置行偏移,行偏移会被添加到各行的结尾,用于确定下一行的起始地址,如下,绿色表示要显示的像素列,黄色表示行偏移,,假如左边显示的是一条竖线,竖线的宽度为1像素,所以行偏移的值为7-1=6,右边的线宽为2像素,行偏移的值为7-2=5,这样可以总结。用于配置DMA2D的输出颜色值,如果DMA2D工作模式设置为寄存器到存储器模式,则此颜色值作为数据源,会被DA2D复制到显存空间,目标空间就会被填入这一种颜色,每个通道的参数取值范围,请参照结构体说明中的注释内容。效果图:晚上拍的照,颜色显示不是很明显。原创 2023-10-05 21:58:04 · 835 阅读 · 0 评论 -
025 - STM32学习笔记 - 液晶屏控制(二) - 代码实现
本来想像之前做SDRAM的时候一样,把所有引脚都做个表列出来,但是上次引脚太多了,列个表太痛苦了。这次就不列表格了,直接把宏定义贴出来各位看一下吧。/* 红色数据线 *///R0 - PH2//R1 - PH3//R2 - PH8//R3 - PB0//R5 - A12//R6 - PB1//R7 - PG6/* 绿色数据线 *///G0 - PE5//G1 - PE6//G5 - PI0//G6 - PC7//G7 - PI2/* 蓝色数据线 *///B0 - PE4。原创 2023-09-29 17:59:07 · 519 阅读 · 0 评论 -
024 - STM32学习笔记 - 液晶屏控制(一) - LTDC与DMA2D初始
图中的CLUT表示颜色查找表,是一种间接的颜色表示方式,使用一个256*32位的空间缓存256种颜色,颜色格式是ARGB8888或RGB888,实际图像只是用这256种颜色,图像的每个像素点使用8位数据表示,但是该数据不是直接的RGB颜色,而是指向颜色查找表的地址便宜,可以理解为像素点应该显示的颜色对应的是颜色查找表里面的颜色,在图像大小不变的情况下,利用颜色查找表i可以扩展颜色显示的能力,特点就是可以用8位的数据表示一个24或者32位的颜色,整个图像种的颜色种类受限于颜色查找表中的256种。原创 2023-09-08 18:05:35 · 2378 阅读 · 0 评论 -
023 - STM32学习笔记 - 扩展外部SDRAM(二) - 扩展外部SDRAM实验
这次使用到的GPIO相当多,这里我们把FMC SDRAM相关的GPIO配置都宏定义到“bsp_sdram.h”中,相关的配置步骤参考之前的工程配置。这里我把我配置好的贴出来,如果我们使用的开发板不一致,请参考自己开发板的硬件原理图。/* A行列地址信号线 *//*BA0 地址线 PG4*//*BA1 地址线 PG5 *//*DQ 数据信号线*//*DQ0 数据线 PD14 *//*DQ1 数据线*//*DQ2 数据线*//*DQ3 数据线*//*DQ4 数据线*//*DQ5 数据线*/原创 2023-08-30 17:08:50 · 861 阅读 · 0 评论 -
022 - STM32学习笔记 - 扩展外部SDRAM(一) - 初识SDRAM和FMC
当行有效命令确定后,紧接着就需要进行列寻址,读命令与写命令的时序基本一致,通过共用地址线A[11:0]发送列地址,同时WE#引脚表示读/写方向,WE#为低电平时,表示写,高电平时表示读。同时读写数据时,用DQM#线来确定有效的数据线。在实际对SDRAM的读写中,我们一般不会对存储器一个一个存储单元的去读写,这样有耗时又耗力,需要不停的发送列地址与读写命令,虽然读写延迟相同可以让数据的传输在I/O端是连续的,但是会消耗大量的内存/控制资源,而且数据在传输过程中,也无法接收新的命令,因此效率比较低下。原创 2023-08-11 17:28:31 · 3188 阅读 · 0 评论 -
021 - STM32学习笔记 - Fatfs文件系统(三) - 细化与总结
上节内容中,初步实现了FatFs文件系统的移植,并且实现了设备的挂载、文件打开/关闭与读写功能,这里对上节遗留的一些问题进行总结,并且继续完善文件系统的一些操作。原创 2023-08-01 16:07:09 · 1379 阅读 · 0 评论 -
020 - STM32学习笔记 - Fatfs文件系统(二) - 移植与测试
在FatFs文件系统的源码中,已经存在了3个设备编号,分别是ATA、MMC和USB,对应编号为0-2,这里我们新增FLASH的编号为3(注意,这里如果直接宏定义为FLASH的话,会和说stm32f4xx.h中重定义,所以这里宏定义为SPI_FLASH)到此文件系统的一直基本完成,需要主义的是,我们在上面对diskio.c文件的修改,使用到了之前我们实现的SPI读写FLASH部分函数,因此需要在diskio.c中也包含#include "bsp_spi_flash.h"头文件,并且源文件中还有。原创 2023-07-29 22:03:33 · 2182 阅读 · 5 评论 -
019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识
当需要读取文件时,根据目录相中,读取到开始簇为2,找到文件分配表中,第2簇上读取到数据为3,表示下一部分数据指向存储在第3簇上,再到第3簇记录上读到下一簇得数据指向为4,一次向后,直到最后一簇11时,发现下一个指向为FF,表示到文件末尾了,到此文件就读取完了。例如在火哥的教程中举的例子,假设现在有0-99共100簇的存储空间(簇可以理解为扇区),其中第0簇是文件分配表,第1簇为目录,后续几个文件分别占用不同数量的扇区存储文件,这些文件的存储信息都在记录在第1簇的目录中。原创 2023-07-27 16:59:12 · 2994 阅读 · 3 评论 -
018 - STM32学习笔记 - SPI读写FLASH(三)- 写入字符串、小数与整数
上节对Flash的跨页写入数据进行了完善,但是数据写入都是以Byte数组的方式进行写入,这节分别进行字符串的写入和小数整数的写入,本节内容对SPI的函数不需要进行修改,在主函数的调用中会完善如何写入字符串、小数和整数。原创 2023-07-19 17:26:15 · 1507 阅读 · 0 评论 -
017 - STM32学习笔记 - SPI读写FLASH(二)-flash数据写入与读取
上节内容学习了通过SPI读取FLASH的JEDEC_ID,在flash资料的指令表中,还看到有很多指令可以使用,这节继续学习使用其他指令,程序模板采用上节的模板。这里的写入数据实现和I2C向EEPROM写入数据基本是一致的,不懂得可以看一下I2C的内容。在完善以下,写一个进阶版的。原创 2023-07-18 22:53:48 · 3334 阅读 · 1 评论 -
016 - STM32学习笔记 - SPI读写FLASH(一)
SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。在SPI总线中,一共有四条线:SCLK:同步时钟信号线,用于通讯数据同步。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率由最低速率设备决定。原创 2023-07-09 15:17:23 · 1942 阅读 · 0 评论 -
015 - STM32学习笔记 - IIC读写存储器(二)
在上节内容中,学习了EEPROM的读写,我用的F429中EEPROM型号为:AT24C02,其容量为256*8=2Kb,这节学习一下如何对EEPROM进行更深层次的读写。函数,其作用是为了等待每次写入数据后,EEPROM回到准备状态,否则可能连续写入的时候,前面的数据刚写入,还没等EEPROM处理完,后面的数据就来了,这样容易写入失败。以上所有用到的bsp程序都是在之前的学习过程中慢慢写出来的,后面学习过程中也会不停的去积累,学习过的内容就不在此处重复占篇幅了,不懂得往前翻一翻看一下。原创 2023-06-21 22:40:33 · 831 阅读 · 0 评论 -
014 - STM32学习笔记 - I2C访问存储器(一)
I2C是支持支持多设备通信的总线,所谓“总线”,是指多个设备共用信号线,在一个I2C通讯总线中,可以连接多个I2C通讯设备,支持多个主机于从机通讯,所有连接在I2C总线中的设备,都有一个独立的地址,主机可以利用这个地址访问不同的设备,I2C有两条总线,SCL(双向串行数据)总线和SDA(川航时钟)总线,SDA用来表示数据,SCL为数据收发提供同步时钟信号。在实现了写数据到EEPROM中后,还需要再实验一个从EEPROM中读取数据的函数,用来验证我们上面的写程序,同样,读取的函数也要根据时序图来编写。原创 2023-06-20 22:02:36 · 719 阅读 · 0 评论 -
013 - STM32学习笔记 - DMA_存储器到外设
上节学习了DMA的存储器到存储器,这节了解一下存储器到外设,以存储器到USART1为例,DMA的配置函数。1、打开DMA2所在总线时钟(再次强调:只要是使用外设,第一步必须打开时钟!流程跟上节的基本一致,区别在于需要选择DMA的通道和数据流。2、配置DMA结构体相关参数;4、等待DMA数据发送完成。3、使能DMA控制器;原创 2023-06-13 18:00:56 · 955 阅读 · 0 评论 -
012 - STM32学习笔记 - DMA_存储器到存储器
我们知道stm32在实际应用过程中具有很强大的功能,包含数据的采集、处理、逻辑功能的运算等,因此stm32一直在处理大量的事务,但是在实际使用过程中,我们知道有些事情实际上不需要CPU过多参与,比如:数据的复制和存储,当产生大量数据的时候,CPU如果转过来进行处理的话,那么对于CPU来说时额外的负载,会严重降低CPU的实际效率。原创 2023-06-13 14:38:39 · 1955 阅读 · 0 评论 -
011 - STM32学习笔记 - 串口通讯
F429提供了8个串口,其中USART1和USART6挂载于APB2总线下,其余挂载在APB1总线,其中1、2、3、6为同步串口,其余的均为异步串口,从下面的表中可以看出,1、2、3、6均具备SCLK、nCTS、nRTS引脚,其余的没有。位7:TXE,发送数据寄存器为空 ,当串口发送数据时,会先读取此位状态,若此位为空,系统会将USART_DR中的数据送入TDR寄存器中后,此位由硬件置1,通过发送位移控制器将数据一位一位的发送出去,当数据全部下发完成后,此位会由硬件置0。原创 2023-06-12 14:56:51 · 638 阅读 · 0 评论 -
010 - STM32学习笔记 - SysTick系统定时器
SysTick是属于Cortex-M内核的一个外设,嵌套在NVIC中,系统定时器是一个24位的递减计数器,每次计数事件位1/SYSCLK,在F429中之前配置的SYSCLK配置的是180MHz,当SysTick的重装载寄存器的值递减到0的时候,系统定时器就会产生一次中断。SysTick属于Cortex-M内核外设,因此只要是CM内核的,都具有这个外设,移植起来就很容易了。SysTick系统定时器一共有4个寄存器,其中CTRL、LOAD、VAL这三个需要配置,CALIB校准计时器不需要进行配置寄存器名称。原创 2023-06-01 23:18:57 · 1617 阅读 · 0 评论 -
009 - STM32学习笔记 - 中断
关于中断的使用,编程内容总结如下几个:1、初始化用来产生中断的GPIO;2、初始化EXTI外部中断/事件控制器;3、配置NVIC中断向量表;4、编写中断服务程序。OGGLE;main.c```c//初始化LED//初始化GPIO、EXTI及NVIC,之后就是进入死循环等待中断触发并执行中断服务程序while(1)关于中断的使用,编程内容总结如下几个:1、初始化用来产生中断的GPIO;2、初始化EXTI外部中断/事件控制器;3、配置NVIC中断向量表;原创 2023-06-01 14:48:42 · 1123 阅读 · 0 评论 -
008 - STM32学习笔记 - 超频
这里我实测了一下,肉眼感觉LED灯貌似没有变化,查了一下资料,网上有人说是频率变化不明显,需要用示波器去采,结果用示波器采了一次180MHz的和这次程序设定的,发现好像也没区别。有懂的人帮忙解释一下,小弟先谢过了。函数进行分析和裁剪,这节自己编程实现系统时钟的配置和超频。在上节创建好的bsp_rccclkconfig.c及bsp_rccclkconfig.h中自定义时钟配置函数。之后我们在main.c中调用一下,同时也结合之前LED闪烁的程序,将开发板的时钟超频操作一下。参数配置 25-360-2。原创 2023-05-24 22:58:40 · 799 阅读 · 0 评论 -
007 - STM32学习笔记 - 系统时钟配置函数SetSysClock
函数原型复制出来,新建bsp_rccclkconfig.c及bsp_rccclkconfig.h文件,再将这两个文件加入工程中,此处方法不再描述,不懂得看LED及KEY那两节)。表示如果使用的时有源晶振的话,则执行下面的代码,但是在野火F429中,使用的时无源晶振,因此此段程序就删除掉了。进行分析前,先将此函数进行裁剪,删除与429不相关的语句,裁剪后的函数原型如下(为了保证库函数的完整性,将。说明此文件支持在代码中体现的F4系列的多个芯片,我这里使用的是野火的F429开发板,代码中。原创 2023-05-23 17:57:28 · 943 阅读 · 0 评论 -
006 - STM32学习笔记 - RCC时钟树
HSI:High Speed Internal Clock Signal,内部高速时钟,当设置使用HSE后,如果HSE发生故障没有起振,系统会自动切换到HSI,等到HSE启动成功后,则会切换回HSE,429的HSI是集成到芯片内部,频率为16HHz。不论是HSE还是HSI时钟,作为系统时钟来说远远不够,而外部晶振频率越高,其功耗也会增加,且误差也会增大,因此需要经过一系列操作,将HSE或HSI经过分频因子M分频后,在通过倍频因子N,之后在经过分频因子P,最后计算出锁相环时钟PLLCLK。原创 2023-05-22 18:47:10 · 754 阅读 · 0 评论 -
005 - STM32学习笔记 - 启动代码
本节内容中需要主要,后续使用的中断的时候,一定要检查中断服务子程序是否写错或者未定义,否则很容易出现中断服务程序无限循环的情况。是标准库函数,在system_stm32f4xx.c中定义,主要是用来配置系统时钟,我现在用的F429的开发板,在调用。这里需要注意的是,使用中断的时候,应为是弱定义的中断服务子程序,因此会优先调用外部定义的服务程序,当我们在外部。是个标准C库函数,但是这里要主义的是,这个main不是我们在C语言中的main函数,时,系统会自动跳转到启动文件中默认的中断服务子程序中,原创 2023-05-21 13:50:12 · 1115 阅读 · 0 评论 -
004 - STM32学习笔记 - 位带操作
bsp_key.c中增加按键检测扫描函数Key1_Scan()和Key2_Scan()原创 2023-05-17 22:25:40 · 444 阅读 · 0 评论 -
003 - STM32学习笔记 - 按键操作
延续上节的程序,在User目录下创建KEY文件夹,包含bsp_key.c及头文件bsp_key.h,之后在Keil中将bsp_key.c加入。原创 2023-05-17 16:29:22 · 217 阅读 · 0 评论 -
002 - STM32学习笔记 - 操作LED灯
在User目录下创建LED文件夹,包含bsp_led.c及头文件bsp_led.h,之后在Keil中将bsp_led.c加入。原创 2023-05-17 14:58:44 · 261 阅读 · 0 评论 -
001 - STM32学习笔记 - 固件库编程
1、工程文件夹内添加:Project、Libraries、User、Doc,之后在Project目录内新建工程,并将标准库中CMSIS、STM32F4xx_StdPeriph_Driver复制到Libraries中。2、将\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates中:main.c stm32f4xx_conf.h stm32f4xx_it.c stm32f4xx_it.h文件复制到User目录下。原创 2023-05-15 22:02:16 · 635 阅读 · 0 评论