自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 STM32-基本知识梳理10-FSMC控制ST7789V-LCD液晶显示屏

2-可以把FSMC的A0地址线(也可以使用其它A1/A2等地址线)与ILI9341芯片8080接口的D/CX信号线连接,那么当A0为高电平时(即D/CX为高电平),数据线D[15:0]的信号会被ILI9341理解为数值,若A0为低电平时(即D/CX为低电平),传输的信号则会被理解为命令。而对于D/CX线,它为高电平的时候表示数值,为低电平的时候表示命令,如果能使用FSMC的A地址线根据不同的情况产生对应的电平,那么就完全可以使用FSMC来产生8080接口需要的时序了。本文使用8080接口通讯。

2023-04-23 13:51:45 5623 1

原创 STM32-基本知识梳理9-FSMC控制外部SRAM

SRAM比较小,没有列地址线,它的数据宽度为16位,即一个行地址对应2字节空间,框图中左侧的A0-A18是行址信号,18根地址线一共可以表示218=28x1024=512K行存储单元,所以它一共能访问512Kx16bits大小的空间。访问时,使用UB#或LB#线控制数据宽度,1,用FSMC外设来管理扩展的存储器,FSMC是Flexible Static Memory Controller的缩写,译为灵活的静态存储控制器。①外部接线引脚,根据不同的存储器类型,由对应的控制引脚,但是地址线和数据线是共用的;

2023-04-21 17:24:32 1683 1

原创 STM32-基本知识梳理8-FATFS文件系统移植

文件系统本质上,可以理解为一个函数B,外部可以通过函数A调用函数B,而函数B不接触底层操作,而是通过调用函数C对底层存储进行操作。3,主要的文件需要包含上述的6个c文件或者h文件,在文件文件中,需要调整主要是diskio.c \ ffconf.h。1-启动首先第一步,是挂载系统。2- 如果写入完成,立即读取,则需要调用lseek进行重新定位,才能读取,这是由文件光标位置决定,相当于退后光标;2,移植需要借用spi-flash控制的源码,在spi-flash控制的源码的基础上,添加文件系统。

2023-04-19 18:47:04 2638 2

原创 STM32-基本知识梳理7-SPI通讯及flashW25Q64BV控制

④SS:片选(从机收到SS低电平,人为被选中,与主机进行通讯),SPI模块中,一般不选用SPI模块的自带引脚,而是使用GPIO中的引脚的推挽模式进行输出;最后补充一下,上面的写入是最大写入256个字节,如果想要无限字节(在内存允许下)的写入,则需要将原本的数据,进行分块处理,这边直接借用了野火的代码。③MISO:-------------------------------------,主机接受,从机输出。:是指数据的采样的时刻,即MOSI 、MISO的被主机或者采集采样的时间,是上升沿还是下降沿;

2023-04-18 20:48:51 758 1

原创 STM32-基本知识梳理6-USART通讯及使用

2,初始化usart,按照上述配置即可,关键是在usart头文件中,要将中断函数的temp,用extern引用出来,在主函数中接受,并判断。2,初始化usart,按照上述配置即可,关键是在usart头文件中,要将中断函数的temp,用extern引用出来,在主函数中接受,并判断。④波特率发生器:主要根据配置的时钟,选择对应波特率,由此处发送时钟信号,从而按照波特率的具体值,发送对应频率的数据;关键点:在中断服务函数,首先检测标志位(数据位非空,规定动作),然后转数据接受给临时变量TEMP。

2023-04-09 11:56:39 1474 1

原创 STM32-基本知识梳理5-滴答定时器配置与使用

逻辑:STK_CLK提供时钟,输入给到递减计数器中,收到一个时钟后,则计数值减少1,当减少到0时刻,则置一次标志位,并且数值调整到重装值;,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。即配置时钟(72M或者9M)后,配置对应的重装值,就可以计算出完成一次计数循环的时间;①COUNTFALG:当计数值到达0时刻,读取一次,硬件上会自动清0;二、滴答定时器系统源码解析及建立一个毫秒的延时模块。1,滴答定时器是24位的系统定时器,属于。2,建立一个ms延时模块。2,滴答定时器的模型。

2023-04-04 22:50:14 1281 1

原创 STM32-基本知识梳理4-EXTI模块

GPIO信号------》AFIO模块选择输入源--------》EXTI模块判断中断信号---------》NVIC模块中断判断处理------》进入中断服务函数。1-开启GPIO时钟,开启GPIO模块,配置浮空输入(也可以是下拉输入,主要硬件配置状态)1-开启GPIO时钟,开启GPIO模块,配置浮空输入(也可以是下拉输入,主要硬件配置状态)开启对应外设模块中断-------》NVIC模块判断------》进入中断服务函数。5-配置中断服务函数,(里面进行GPIO引脚的电平反转,位的异或操作)

2023-04-03 00:34:04 313 1

原创 STM32-基本知识梳理3-时钟系统详解\重写时钟模块MCO输出

⑤在④产生的SYSCLK模块,进入AHB总线中,通过AHB预分频器处理,这里一般选用 1分频;④通过SW寄存器配置,选择SYSCLK系统时钟的时钟源,一般选用PLLCLK,即72MHZ。1,时钟系统在STM32中,相当于人的心脏,内核及外设,根据时钟的频率执行各位的模块;至此时钟源模块配置完成,为了检查配置,在MCO输出,并可以通过示波器检查数据的时钟周期。③PLL锁相环模块,在这个模块中,对②产生的时钟,进行倍频处理,一般选用9倍频;到此,基本时钟模块配置完,核心的时钟线路配置完成;

2023-04-02 16:01:58 1541 2

原创 STM32-基本知识梳理2-启动文件简述

③复位程序(第一个具体执行的程序),实现时钟初始化配置(72Mhz),实现_main()执行。⑤-中断服务程序,全部为空,需要自己在C程序里面另外实现,但是函数名字必须跟这里的一样。如果不一样,则会执行这里的中断服务函数,即无限循环,出现这样的错误很难发现。1,启动文件都是由汇编实现,是开发板上电,程序运行的第一个程序;④复位程序,具体执行时钟初始化程序,C库_main()⑤用户堆栈的初始化,在_main()执行;②申请开辟中断向量表,可以理解为开辟数组。①分配栈空间,分配堆空间。

2023-04-02 09:22:18 395 1

原创 STM32-基本知识梳理1-位带操作

这边主要说,外设别名区的转化到位带,本质上在转化完成的区域对32位区域操作,继而实现对外设区域的某一位的操作;转化之后的操作,在转化后的别名区,对该地址内的数据进行操作,并且只有最低字节是有效的。实际上在stm32中的位带区转化公式(考虑到SARM的转化)2,位带别名区,分为两个部分:①外设别名;字时,就可以达到访问位带区某个比特位的目的;位的字,当访问位带别名区的这些。的空间的每一个位膨胀成一个。二、位带区与位带别名区转化。一、位带操作的基本概念。位带区操作LED点亮。

2023-04-01 22:54:08 591 1

原创 STM32--微项目14-手撸I2C通讯、实现MPU6050六轴传感器控制

启动位+写入MPU6050地址(写)+等待ACK+写入要读取的寄存器地址+等待ACK+重新启动+写入MPU6050地址(读)+等待ACK+主机释放SDA+接受从机数据+主机发送NACK不再接受数据+停止位。启动位+写入MPU6050地址(写)+等待ACK+写入要读取的寄存器地址+等待ACK+重新启动+写入MPU6050地址(读)+等待ACK+主机释放SDA+接受从机数据+主机发送NACK不再接受数据+停止位。主机控制时刻,数据由主机进行数据发送,对应地址的从机进行数据接受,

2023-03-21 10:56:08 626 1

原创 STM32--微项目13-USART通讯字符串交互并实现点灯控制

电脑端发送数据执行,比如:“LED ON”、“LED OFF”,STM32通过获取到数据后,相应对应数据指令,并执行开灯和关灯操作;④在S=2时刻,当收到’\n‘,则认为本轮数据包整体上接受完毕,S=2切换到S=0,为下次进入状态机做准备;②在S=1状态下,当没接受到‘\r’字符,则认定这个数据段的数据,都要接受存放到字符数组中。2,创建发送函数,并且封装为发送字符串数据(当检测到\0时刻,认为本轮数据传输完毕);①主要需要关注的是,发送一个数据位,需要等待发送寄存器为空,才认为数据已经发送;

2023-03-20 14:20:05 780 1

原创 STM32--微项目12-USART串口输出HEX数据包

0时刻,不能判定为包头开始,防止在接受的实际数据段存在0xff导致数据错误的情况;③在S=2状态下,如果等待到包尾,则一个完整的数据包接受完成,此时上传标志位,并且S=0,等待下一轮数据;②在S=1状态下,开始接受数据,并开始计数,当数据包内容计数达到4时刻,切换状态为S=2;2,数据传递过程:数据打包---发送---数据解包--根据数据解包,进入做出相应操作。①主要需要关注的是,发送一个数据位,需要等待发送寄存器为空,才认为数据已经发送;发送包头---发送数组数据---发送包尾。

2023-03-20 13:43:18 724 1

原创 STM32-微项目11-USART传输+printf重定向串口打印

使用STM32,通过USART通讯方式,将数据传输到CH340端口,由CH340端口将数据转为USB协议,最终在笔记本上,通过上位机 查看;②通讯端口只有RX和DX,需要注意的是,RX要和对方的TX链接,TX要和对方的RX链接,硬件上无比交叉连接;数据发送:发送数据存放在发送数据寄存器TDR-----放到发送移位寄存器---按位逐步发送。数据接受:外部数据---到接受移位寄存器---满足一个字节后,转到RDR数据接受寄存器。③数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行;

2023-03-17 15:03:30 1333 4

原创 STM32-微项目10-ADC多通道采集+DMA数据转移

外部GPIO采集----ADC转化执行-----存放到CR寄存器中-----触发DMA转移信号----DMA硬件触发开始转移数据-----从外设寄存器DR转移到SRAM的数组中。需要注意:1)触发模式---硬件触发;需要注意:1)触发模式---硬件触发;③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;7)配置计数器值4位;

2023-03-15 10:50:50 3591 1

原创 STM32-微项目09-DMA数据传输

具体操作的是外设寄存器的部分,可以读取转运到存储器中,也可以将存储器的数据通过DMA转运到这边;需要注意的是,硬件触发对于DMA的通道开启有要求,即对应的模块,需要开启对应的DMA通道,才能正常硬件触发启动;int a[10];DMA数据传输,实现DMA在外设和存储器或者存储器和存储器之间的高速数据传输;图中1:DMA的核心模块,负责DMA接受、传输、转运来自外设和存储器的数据。④传输计数器:一轮传输,传输几个数据宽度的数据,计数器会依次递减到0。图中3:运行内存SRAM,运行中数据,及定义的变量数据;

2023-03-14 17:21:59 577 1

原创 STM32-微项目08-ADC单通道/多通道模式采集

1,利用STM32内置的ADC模块,将外部模拟量信号(0-3.3v)转化成12位有效(16位数据)的数字量(0-4095),在将采集的数字除4095,就会得到对应采集的模拟量信号;在外部有模拟量输入时,DAC设置参数并输出模拟量,对比模拟量数据和输入的模拟量相近或相等时刻,则配置输出的DAC的数字量参数,就是输入模拟量的对应转化后的数字量;①数据流:外部GPIO模拟量-----AD转换器(注入组和规则组)-----触发转化 ----转化数值存放到AD数据寄存器中。非扫描模式,仅转化序列中的第一个;

2023-03-14 13:07:42 3791 1

原创 STM32-微项目07-旋转编码器计数及测速

两路GIPO输入---滤波器----边沿检测极性选择---输入TI1FP1和TI2FP2给到编码器接口---根据相位模式(T1和T2的相位之差)判断CNT是向上计数还是向下计数-----经过分频器处理,最后实现计数。如果一直向下计数到0,在继续计数时,则寄存器数据由于无符号整型缘故,会变成65535,由于数据以补码的形式存储,则强转为int时刻,会变成-1;③初始化时基模块(注意,在编码器模式下,不需要配置时钟源,输入的TI1FP1或TI2FP2作为时钟),主要是指ARR和PSC。

2023-03-13 16:56:09 5051 2

原创 STM32-微项目06-PWMI模式检测周期和占空比

①在第一个上升沿时刻,开始CNT计数,在出现第一个下降沿时刻,将此时的CNT放置到CCR2寄存器中,在出现下一个上升沿时刻,将此刻的数据存放在CCR1中;①GPIO采集信号--滤波器处理--边沿检测----给到两路通道TIM_Channel_1 TIM_Channel_2---②时基模块,一直在运行中,当遇到第一次下降沿,数据会保存在CCR2中,用于计算占空比的数据。检测外部输入的PWM波,并且输出对应PWM波的占空比和频率。stm32F103C8T6核心板一块。⑥输入模块配置-通道2(交叉通道)

2023-03-13 13:01:33 893 1

原创 STM32-微项目05-输入检测测试PWM周期

1,时基单元,按照设定的PSC,输入的时钟源信号进行计数处理,当收到输入捕获模式的触发源后,将CNT的数值转移CCR1寄存器中,CCR1的值就是本次计数的数据,在进行一轮计算就可以得到输入的频率,①选择PWM1模块,在CNT计数值<CCR时刻,REF置为有效电平,在CNT计数值>=CCR,且小于ARR时刻,REF置为无效电平;利用TIM2定时器产生的PWM波,输入到TIM3输入检测模块,在接收到输入的PWM信号,模块进行计算,在OLED上打印对应的频率。2,输入比较模式下,检测输入的PWM波。

2023-03-12 17:22:13 603 1

原创 STM32-微项目04-定时器定时中断

时基模块的中断溢出逻辑: 时钟源/(PSC+1)产生新的时钟输入,每次收到一次时钟后,则CNT自增加1,在等于ARR自动重装寄存器时,则产生一次中断输出。①在接收到时钟模块产生的中断信号后,保存当前程序运行节点的环境,进行中断服务函数处理,完成中断服务函数后,返回到主程序的断点位置;①如上图,基本时钟模块主要分为:时钟源设定+时间单元配置 (主要是PSC分频和ARR自动重装器)+定时器中断溢出。实现1s一次的中断模块,并在中断函数中实现必要的操作。②配置时钟源为内部72MHZ,再配置时基单元。

2023-03-12 11:53:00 290 2

原创 STM32-微项目03-pwm控制直流电机运行

实现利用STM32F103C8T6+TB6612,输出不同占空比输出的PWM波,从而实现电机不同转速的运行、正反转的功能;①驱动模块是具备两路PWM输入,两路out口,两路AIN,可以实现对两个不同电机的转速控制、方向控制;⑧配置PA4,PA5控制输出、配置GPIO模块---推挽输出。⑤配置PWM输出的端口PA2的GPIO ---复用推挽输出。⑤配置TIM2输出端口的GPIO,复用推挽输出。①配置GPIO时钟和TIM2的模块时钟。③配置时钟模块,ARR和PSC模块。1,定时器输出比较,输出PWM波。

2023-03-11 11:06:44 2962 1

原创 STM32-微项目02-通用定时器输出比较-PWM控制舵机

1,按键控制舵机转动,分别是0度---30度----60度----90度-----........-180度;1,pwm模块配置:开启TIM2时钟、开启GIPIOA时钟----配置时钟源-----配置时基模块----配置输出比较模块---配置GPIO-PA1端口---开启时钟TIM2。(其中,配置复用推挽输出的原因是的,只有在配置复用模式下,TIM才能控制GPIO的输出)1-输出模块控制器,可以实现CNT与CCR的比较,在CNTCCR输出不同的REF,具体由控制模式决定;

2023-03-10 11:44:10 614 2

原创 STM32-微项目01-基本定时器的使用

基本定时器的使用

2023-03-09 11:21:44 247 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除