- 博客(51)
- 收藏
- 关注
原创 stm32完全学习——NRF24L01模块
对于这个模块的移植,无论是标准库还是HAL库,无论是软件模拟SPI还是,硬件SPI通信,网上都有很多的例子,这里关于移植的事情就不再赘述了。
2025-03-20 10:12:50
900
原创 STM32完全学习——RT-thread标准版移植
由于CubMax软件里面虽然可以添加RT-thread操作系统,但是当你想使用设备驱动这个模块时,选中之后程序运行的不正常,尤其是在CubMax里面勾选了device选项之后,FinSH的运行都会不正常。原本打算在那个基础之上进行移植,但是由于缺的东西实在是太多了,因此就直接将标准版的RT-thread移植一下,首先我使用的是STM103C8T6这个芯片,基础的代码和配置通过CubMAX软件来完成。
2025-02-17 12:43:16
1961
原创 STM32完全学习——RT-thread在STM32F407上移植
关于源码的下载,以及在KEIL工程里面添加操作系统的源代码,这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的,因此需要额外的进行串口的初始化,有些人可能会问,为什么不直接使用CubMAX直接进行系统的移植,经过我的尝试发现,这个玩意移植的RT-thread会有一些小的bug,比如直接生成的代码FinSH工作不正常,修改方法和第七节一样。虽然整个系统的调度啥的都是正常的。
2025-01-24 20:03:32
2907
原创 STM32完全学习——使用LIBJPEG库解码图片
这个库的移植可以说是,很简单,直接使用CubMAX工具就可以帮我们生成移植好的代码,如果你想移植到其他平台,将CubMAX生成的那几个文件拷到你的工程里面就可以了。主要是这个如何使用起来,其实也不难,就是注意好细节接可以了。
2025-01-04 21:54:29
1924
1
原创 STM32完全学习——0V5640的JPEG模式采集
我参考的是买开发板的时候,普中送的资料里面的源码,他那个是用标准库写的,我将他的代码移植到了HAL库,有一些不一样的地方。由于标准库和HAL库的差别造成的。
2025-01-02 23:11:06
2510
21
原创 STM32完全学习——使用定时器1精确延时
首先一定要是递减定时器,递增的不太行,控制的不够准确,其次在大于10微秒的延时是非常准确的,小于的话,就没有那没准,但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟频率高的定时器,是比较好用的。
2024-12-29 23:55:49
935
原创 STM32完全学习——FATFS支持中文
只有0这个编码才能和ffunicode.c里面的编码对上号。还有就是ffunicode.c这个文件一定要包含到工程里面。3代表的是使用堆内存进行管理。
2024-12-27 13:44:21
359
原创 STM32完全学习——FATFS0.15移植SD卡
大家都知道使用CubMAX可以很快的将,FATFS文件管理系统移植到单片机上,但是别的芯片没有这么好用的工具,就需要自己从官网下载源码进行移植。我们首先解决SD卡的驱动问题,然后再移植FATFS文件管理系统。
2024-12-27 13:05:03
1916
原创 STM32完全学习——FLASH上FATFS文件管理系统
我们通过看官网的手册,可以看到我们只要完成下面函数的实现,就可以完成移植。我们这里只移植前5个函数,获取时间的函数我们不在这里移植。
2024-12-26 15:54:53
1166
原创 STM32完全学习——SPI接口的FLASH(DMA模式)
CPOL和CPHA这两个的配置和FALSH那边一定要保持一致,不然通信就会不正常,我使用的是W25Q128这个FALSH,下面是它的时序。我这个FALSH默认情况下使用的是模式0,模式0规定时钟线默认就是低电平,如果你选择的是模式3,那么你 CubMAX那边的设置,是需要一起修改的。
2024-12-23 11:48:27
1862
原创 STM32完全学习——CRC校验
由于STM32F407的CRC校验,并没有什么配置的选项,就会导致他只能进行32位,且初始值是0XFFFFFFFF,输入和输出都没有反转的CRC校验。为了弥补这些不足点,于是自己编写函数来增加这些功能。
2024-12-19 18:36:41
671
原创 STM32完全学习——独立看门狗和窗口看门狗
本文使用的是STM32F407ZGT6芯片,使用STM32CubMAX生成的代码,并且使用的是HAL库
2024-12-18 13:31:05
841
原创 STM32完全学习——CAN过滤器
如果这两个32位的寄存器,来配置16为标识符过滤器,可以配置出来4个不同的过滤器。这配置最为简单,就是将需要匹配的ID号,左移5位,和下面红色的圈出来的那个,按位对齐就行。下面那3个也可以这样配置,都是一样的。
2024-12-18 13:06:34
915
2
原创 STM32完全学习——STemWin的移植小插曲
新版的STemWin的库没有区别编译器,只有一些这样的文件,默认你将这些文件导入到KEIL中,然后编译就会有下面的错误。通过不断地对比实例代码,然后发现是因为这个文件的类型设置有问题。改成库文件类型就可以了。然后编译就不会报错。
2024-12-13 23:27:01
406
原创 STM32完全学习——FSMC控制LCD的一些问题
上面这样写是没有问题的,屏幕也可以正常显示,我这里这是说我发现的问题,也就是不同点,像FSMC的初始化这些,网上有太多的文档了,这里也就没必要说了。主要的区别还是在上面这两个函数。
2024-12-12 10:12:14
681
原创 STM32完全学习——DS18B20移植到STM32F407ZGT6
看上面这个代码你在看我写的DS18B20的函数,你就会发现当你想要输出的时候,就直接给PGout()直接赋值就行了,括号里面填的是具体哪个引脚。想了解的可以看我的另外一个博客。下面对上面代码的细节做一些解释,首先我使用了STM32里面的bitband,也就是位带访问的方式来操作GPIO的端口。下面是我的biband.h里面的代码,下面这个代码是我对普中官方的例程里面做了一些修改。为了方便输出我这里将printf函数做了重定向,前提是你必须对串口做了相关的初始化,不然printf函数也不知道要发到哪里去呀。
2024-11-25 12:53:48
576
原创 STM32完全学习——使用标准库完成PWM输出
我这里使用的是STM32F407ZGT6这个芯片,我这里使用的是定时器TIM2来完成PWM输出,由于这里没有使用中断,因此不需要初始化NVIC,下面先来进行定时器的相关初始化由于输出比较可以有4路,我这里使用的是CH2因此关于标准库里面的初始化函数不要使用错了。下面我们来进行初始化PWM相关的寄存器。
2024-11-24 20:09:09
1021
原创 STM32完全学习——使用SysTick精确延时(阻塞式)
首先关于SysTick寄存器的数据在下面这个文件里面可以找到,平时那个数据手册是没有的。其次我这边使用的开发板是F407的开发板,关于这个寄存器的数据都是来自下面这个文件的截图,一般只会用到这3个寄存器。
2024-11-21 16:52:51
735
原创 STM322完全学习——FSMC控制LCD显示屏
首先这个功能只有大容量的STM32系列有,C8T6是没有的。再就是FSMC这个使用的是GPIO的复用功能,下面先完成我们需要使用的GPIO的初始化主要看的是你的这些接口接的是哪里,这个每个开发板的设置可能都不太一一样但是也大差不差,仔细核对好。
2024-11-21 00:06:19
2022
原创 STM32完全学习——STM32F407ZG7T6使用标准库点亮LED
首先STM32F4使用的是KEIL5,KEIL4搞不了。首先在一个文件夹建立下面几个文件夹。
2024-11-20 21:50:04
627
原创 STM32完全学习——外部中断
我们在这里使用标准库的方式来处理。因此只需要调用几个函数就可以了。这里需要注意的是我们需要开启AFIO的时钟,这是因为中断事件需要在AFIO——EXTICRX寄存器里面进行配置。看下图就可明白。
2024-11-19 17:27:03
700
原创 STM32完全学习——使用标准库点亮LED
我们一般只会使用到红色标注的那个文件夹,我们一般也只会将这个文件夹导入到工程里面,其他的还有一些例子什么的,它里面提供了一个示例工程,我们按照那个建立就可以了。我这里主要是自己手动进行工程的创建。首先我们找到一个文件夹,然后在里面创建下面的文件夹,你学会之后也可以自己改变,想怎么搞就怎么搞。这里的做法都不是唯一的。然后我们来看每个文件夹里面都放了什么,首先我们来看CMSIS文件夹。这个文件夹其实就是标准库里面直接复制过来的,下面是他在标准库里面的位置。
2024-11-18 23:00:39
903
原创 STM32完全学习——F407ZGT6点亮LED
我们想要点亮LED,无非就是对于寄存器的一些设置,主要分为两步,首先是需要打开相应GPIO的时钟,这是因为STM32在上电后,每个外设的时钟默认都是关闭的,需要我们手动打开。其次就是对GPIO的一些寄存器进行设置,然后给端口输出0或1就可以点亮LED了。需要注意的是我们这次需要在KEIL5软件下进行编程。
2024-11-15 10:18:12
1150
原创 STM32完全学习——系统时钟设置
首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我们需要完成下面一些设置完成切换。首先我们需要打开外部HSE的震荡电路然后,等待外部震荡电路就绪后,在切换PLLTPRE为HSE的1分频,在设置PLLSRC为PLLXTPRE过来的时钟。然后设置PLLMUL倍频系数,然后打开PLL开关等待PLL稳定。
2024-11-14 16:59:45
3436
原创 STM32完全学习——点亮LED灯
首先我们知道STM32对外设的操作,是靠对寄存器的设置来完成的。因此我们想要点亮LED灯,就需要知道端口的控制寄存器,然后给寄存器设置不同的值就可以让端口来输出0或1,首先我这里使用的是GPIOA这个端口的0-8位来做实验,其余的类似处理即可。(1)端口配置低寄存器(GPIOA_CRL)地址:0x40010800当MODEx[1:0] = 0;输入模式00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留当MODEx[1:0]!= 0;输出模式。
2024-11-13 12:13:45
1357
原创 STM32完全学习——存储器映像
1、STM32是32位的CPU,数据总线是32位的,地址总线也是32位的。两个可以不一样,也可以一样,可以访问的地址容量的4GB(2^32Byte),STM32是内存与IO统一编址的。2、STM32的实际地址安排:0X0000 0000——0X0800 0000 128MB 映射区 ,映射到闪存或系统内存,取决于引导引脚0X0800 0000——0X0801 FFFF 128KB Flash memory 主存储块(用户闪存存储器)
2024-11-07 10:01:12
1632
原创 51单片机完全学习——红外遥控
红外接收头内部本身有一个反相,意思就是:平时发送方无信号时接收到的是1,发送方有发送载波时接收头引脚输出的是0,写代码的时候注意这一点。红外协议,你也可以理解成,他对0和1重新做了一些定义:560微秒的高电平加上1.69毫秒定义为逻辑1,560微秒的高电平加上560微秒的低电平定义为逻辑0。需要注意的是这里有一个反相,写代码一定要注意。简单点就是上面说的低电平其实是高电平,高电平其实是低电平。也就是下面的黑色部分其实是低电平,没有黑色的部分是高电平。
2024-10-27 10:23:04
1270
原创 51单片机完全学习——DS18B20温度传感器
首先我们知道DS18B20使用的是单总线传输,默认情况下读出来的温度是12位的,我们这里只讨论外部电源供电这种情况。有这张图片我们知道,12位温度的最小分辨率是10^-4次方,因此就是0.0625.我们只需要将最后读到的温度,乘以0.0625即可得到我们测量到的温度。通过单总线端口访问DS18B20的协议是:首先进行初始化、ROM操作命令、存储器操作命令、执行/数据,这4步来完成的。接下来我们一步一步的来看。
2024-10-24 17:13:05
6857
原创 51单片机完全学习——LCD1602液晶显示屏
通过看数据手册我们需要知道,这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道,这些引脚和我们的编程是有关的,需要注意的是,这里我们在接线的时候,一定要把DB0-DB7接到同一个端口,意思就是要接P0就都接P0。这样方便我们直接去处理。我们这里使用的是并行数据传输,也就是说并不像我们之前学习的I2C和SPI接口,需要一位一位的接收和发送。这里的8位数据是同时进行传输的。因此时序上也会有一些区别。
2024-10-23 11:04:04
2519
原创 51单片机完全学习——AD转换
由于51单片机内部并没有AD转换的相关模块,因此使用外接外部芯片的方式,来进行AD转换的操作,我们使用的是XPT2046这个芯片来做的,这个芯片使用的是SPI的接口,主要有4根线来进行通讯:DCLK:外部时钟信号输入 CS:片选信号,低电平时芯片使能。针对上面的函数,其实你只需要使用最后一个就可以了,前面的函数都会在这个函数里面调用,需要注意的是,最后这个函数的输出量是采集到的12位的AD输出,还没有进行电压值的转换。对于程序里面的一些端口的定义,宏定义,函数声明等我就没有写在里面,自己补充就可以了。
2024-10-18 12:32:29
1288
原创 51单片机完全学习——I2C通信之EEPROM
一、I2C总结(1)I2C低层时序:起始信号、停止信号、发送字节、读取字节(2)三根线:GND、SCL、SDA,串行,电平式(3)总线式结构,可以一对多,总线上可以挂上百个器件,用从地址来区分(4)主从式,由主设备来发起通信及总线仲裁,从设备被动响应。(5)通信速率一般,不适合语音、视频等信息类型(6)只有在总线非忙时才被允许进行数据传输(7)起始信号:时钟线保持高电平期间,数据线从高电平跳变到低电平(8)停止信号:时钟线保持高电平期间,数据线从低电平跳变到高电平(9)应答信号:每次数据
2024-10-17 15:21:17
548
原创 51单片机完全学习——RTC(DS1302)
1、SPI数字接口访问:3线或4线,同步,主从,串行。2、内部存着一个时间点信息,可以读写,上电自动走表。
2024-10-16 15:17:33
1820
原创 51单片机完全学习——步进电机
步进电机需要按照一定的时序进行通电,才能够进行转动。我使用的是4线步进电机,需要接4个IO口,两两一组。步进电机有一个固定的步距角,和步进电机本身有关。步进电机一般情况下只能以固有步距角的整数倍来运动,一个固有步进角的移动就叫做一个节拍。电机还有可以比固有步进角更小的运动方法,这种方法叫细分,由电机驱动器来支持。相数越多步进电机越精确,也就是绕阻的个数。我们使用的是2相的步进电机。步进电机的极性:单极性,双极性。
2024-10-10 11:03:39
2065
原创 51单片机完全学习——蜂鸣器
蜂鸣器需要不断地接通断开,通过接通和断开的时间间隔,来改变蜂鸣器的声音。主要有两个参数来控制,一个是音调,一个是声音大小。其中音调是受振动频率控制的,就等于控制信号的频率。频率越高音调越高,声音听起来越刺耳。声音大小由硬件决定,不能软件控制。无源蜂鸣器需要一定的频率的波形去控制它,才能发出声音。有源蜂鸣器只需要通电就可以响起来,有源蜂鸣器也可以用频率信号驱动。
2024-10-09 21:37:27
7093
原创 51单片机完全学习——定时器和计数器
定时器的本质是对脉冲进行计数,51定时器T0和T1是加法计数器。(需要注意定时时时间的设置为65535-需要定的时间)如果计数脉冲来自系统时钟,则为定时方式。如果技术脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加1。T0有4种模式,T1有3种方式。定时器相关寄存器:TCON、TMOD、TL0、TL1、TH0、TH1。其中MSB表示高位,LSB表示低位。具体的寄存器功能看数据手册就可以了,这里就不赘述了。
2024-08-06 17:56:29
702
原创 51单片机完全学习——独立按键
这种方式需要CPU不断地去检测用户的按键是否按下,CPU对于按键什么时候按下是未知的,因此就需要不断地去检测,而且检测的周期需要的时间不能太长,不然会错过用户的按键。也不能太短不然CPU的资源都会浪费在这个地方。
2024-07-27 16:41:18
1143
原创 指针才是C的精髓
指针的实质就是变量,指针变量存储的是另一个变量的地址,而不是放一些其他类型的数。指针的出现是为了实现间接访问。指针的使用方法:首先定义指针变量,其次将指针指向另一个变量,然后解引用使用。当给没有绑定指针之前,这个指针不能被解引用。指针使用三部曲:定义指针变量、关联指针变量、解引用。指针变量定义的同时进行初始化格式:int *p = &a;指针变量定义完成后在初始化格式:int *p;p = &a;
2024-07-27 11:58:16
271
原创 51单片机完全学习——LED点阵
通过看下面的原理图我们发现,LED点阵的每个引脚并没有直接接在单片机的IO口上面,而是和74HC595芯片接在了一起,我们通过查看资料发现,74HC595芯片是一个串行输入转并行输出的一个芯片。那它是如何进行串行转并行的呢?首先这个芯片需要一定的时序才能正常工作,我们主要使用它的3个引脚,分别是RCLK(锁存时钟)、SCLK(移位时钟)、SER(串行采样输入)。
2024-07-27 11:57:44
2205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅