自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 03:选择语句的练习

c语言

2024-11-04 21:24:42 209

原创 05:【HAL库】定时器

将TIM2的CH1配置为输出PWM,将TIM3的CH1配置为输入捕获,且打开输入捕获的中断,捕获PWM并测量PWM的周期和频率。使用VSCode打开创建好的工程,查看TIM3输入捕获中断的回调函数。使用SysTick定时器中断LED间隔1s闪烁。使用通用定时器中断LED间隔1s闪烁。打开CubeMX按如下进行配置。查看配置完TIM后的GPIO。

2024-10-24 18:56:44 420

原创 04:【HAL库】串口通信USART

如图是串口中断的服务函数,由上面的步骤可知,我们开启串口中断是开启了它所有的中断,所以我们通过不同的中断回调函数来执行需要的功能。复制USART_SendBytes文件,改名为USART_Interrupt_SendBytes,然后将.ioc文件也改名。复制OLED文件夹,改名为USART_SendBytes,然后将.ioc文件也改名。使用VSCode打开创建好的工程,查看生成的文件代码如下图。使用VSCode打开创建好的工程,查看相关代码。想接收变长数据,则需要判断IDEL位。通过中断接收变长数据。

2024-10-23 10:23:30 294

原创 03:【HAL库】外部中断的使用

复制03KEY_LED文件夹,改名为05EXTI_KEY_LED,然后将.ioc文件也改名,双击打开CubeMX。将PB0配置为外部中断,且为上拉输入,下降沿触发。代码编辑,重写中断服务函数的回调函数。打开工程,找到中断函数。

2024-10-22 15:53:42 255

原创 13:(寄存器开发)RTC时钟

【注】配置RTC的分频系数,计数器的值CNT,读取计数器的余数的时候,要进入配置模式,将这些值配好,然后退出配置模式,才能生效。时间戳:使用在线转换的时间戳是伦敦时间的,转换为中国的时间,则需要在小时的后面加上8即可(因为伦敦的时间和中国的时间相差了8个小时)。在stm32f103c8t6中备份寄存器的数据寄存器只有DR1~DR10,且每个DR保存2个字节的数据,即是16位的数据。VBAT引脚会接电池和其他电源,当VDD断电时,可以保存备份寄存器的内容和给RTC供电。②RTC.h文件的代码如下;

2024-10-20 11:21:17 525

原创 12:(寄存器开发)电源控制

有关于stm32f103c8t6的电源低功耗模式的基础知识请参考标准库入门教程的第25章:链接: link如上图所示:stm32的供电分为4个部分。ADC/温度传感器/复位模块/PLL为于第一部分区域,其中VREF为ADC的参考电压。其他的片上外设为于第二部分VDD供电区域。CPU和CPU内核的外设位于第三部分。备份寄存器和RTC位于第四部分(可以由VBAT/VDD供电,通过电压检测器决定)实验:在进入睡眠模式查看灯的状态,通过中断唤醒,查看是否会进入中断函数,执行完中断函数后,是否接着未执行完的代码执行。

2024-10-20 11:07:25 833

原创 11:(寄存器开发)DMA的使用

案例:使用DMA1将ROM中的数据搬运到SRAM中,ROM中保存的数据一般是常量,所以在定义的时候前面加上关键词const,不可在改变。,因为地址对接好后,开启ADC转换,转换的数据保存到数据寄存器里面,然后数据寄存器申请DMA请求,DMA就开始搬运数据,这样通道AIN0测量的数据就正好搬运到Data[0]中。实验:通过DMA1将SRAM中的数据搬运到串口USART1的发射数据寄存器,然后通过串口发射到上位机。案例:将ADC的规则组配置为多通道的连续扫描模式,通道DMA将被转换的数据搬运到SRAM内存中。

2024-10-16 18:29:47 453

原创 10:(寄存器开发)ADC模数转换

②连续非扫描模式下:给一个触发信号后,规则组就会不断的转换。若规则组有多个序列在使用,测量多个通道的电压值,那么要及时取出前一个被测量的数据,不然会被后面的数据覆盖掉。①stm32f103c8t6的ADC测量电压的量程为0~3.3v,需要测量外部更高的电压,则可以通过测量电阻分压后的电压,通过分压后的电压来判断总电压的变化情况。③想要通过规则组的一个序列测量多个通道的数据时,可以在第一个通道被测量完成后,将学列中的通道号修改为第二个通道的通道号,这样循环往复。③注入组的优先级大于规则组的优先级。

2024-10-15 15:27:21 445

原创 09:(寄存器开发)SPI的使用

②往W25Q64的内存里面写入数据之前要进行擦除和写使能。

2024-10-13 11:21:11 998

原创 08:(寄存器开发)I2C的使用

I2C时序的基础知识请参考”标准库入门教程中的第19篇“链接: link实验:利用I2C时序对EEPROM模块(AT24C02)进行写入/读取数据的操作,EEPROM模块的设备地址位0xA0,且此AT24C02存储空间只有256个字节(地址为0x00~0xFF),其中1页数据为8个字节,所以一次性写入最多1页的数据(8个字节)。①I2C.c文件的代码如下:②I2C_AT24C02.c文件的代码如下:③主函数文件的代码如下:实物效果如下图所示:①I2C.c文件的代码如下:②I2C.h文件的代码如下:

2024-10-11 16:13:27 768

原创 07:(寄存器开发)串口通信

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

2024-10-09 21:51:45 658

原创 06:(寄存器开发)定时器二

(因为向下计数,初始前计数器里面的值为0,定时器初始化后,重装载寄存器里面的值会转载到计数器里面,计数器里面的值有0变为N,相当于一次溢出,产生一个更新事件,若开启了中断,则会立马进入中断复位函数)此功能可以捕获输入通道上输入信号的上升沿或下降沿,多用于测量PWM的周期/频率,也可以测量占空比,只要测量出连续的一个上升沿和一个下降沿的时间间隔,然后除以周期即可。因为在第一个上升沿来的时候触发中断,在执行中断函数的时候,PWM波形不断的“走”,当执行到清零计数器的代码的时候,PWM波形已经走了一会了。

2024-10-09 16:19:52 1066

原创 05:(寄存器开发)定时器一

①时钟来源不同:滴答定时器的时钟来源于系统总线AHB,基本定时器的时钟来源于APB1②计数不同:滴答定时器是向下计数(24位),而基本定时器是向上计数(16位)③所处位置不同:滴答定时器位于芯片内核,使用时不用开启时钟,中断时也不用开启NVIC_EnableIRQ()。基本定时器属于片上外设,使用时要开启时钟,使用中断时也要开启NVIC_EnableIRQ()④内部结构不同:滴答定时器没有影子寄存器和预加载寄存器,也没有预分频寄存器。

2024-10-06 23:10:21 850

原创 04:(寄存器开发)使用外部中断按键控制LED

关于外部中断的AFIO,NVIC的基础知识请参考《stm32标准库入门教程》链接: link如上图所示:外部中断配置寄存器AFIO_EXTICR(1~4)中选择EXTI(0 ~ 15),在选择好的EXTI中填入对应的数值选择引脚。本次实验:我们需要对引脚PB0进行外部中断检测,来控制LED灯的亮灭,则选择的寄存器是外部中断配置寄存器1(AFIO_EXTICR1),选择寄存器中的位0~位3(EXTI0)填入数值0001(选择PB0)实物连接如下图所示:具体的配置代码如下:2、上升沿触发/下降沿触发

2024-10-04 22:38:31 879

原创 03:(寄存器开发)OLED的简单使用

综上:只是将软件模拟I2C的引脚由标准库配置模式改为寄存器配置模式,其他的代码不变。

2024-10-04 17:15:45 386

原创 02:(寄存器开发)流水灯/按键控制LED

流水灯呈现的样子:就是第一个LED灯点亮,延迟一段时间,第一个LED灯熄灭+第二个LED灯点亮,延迟一段时间,第二个LED灯熄灭+第三个LED灯点亮…其中延迟一段时间就是让单片机不做任何与LED灯有关的事情,这里使用延迟函数来实现。通过第一章的学习,我们已然知晓了LED的点亮和熄灭的方式,下面学习流水灯的制作流程。所以被检测的引脚要配置为输入模式。代码优化2:制作来回流水灯。

2024-10-04 16:51:08 924

原创 01:(寄存器开发)点亮一个LED灯

单片机(Single-Chip Microcomputer)单片机微型计算机,是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、闪存flash、多种l/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。STM32F103C8T6又被称为32位单片机,那么这个32代表着什么意思喃?——

2024-10-03 23:38:28 1490

原创 28:CAN总线入门一:CAN的基本介绍

CAN总线是一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。两根通信线(CAN_H、CAN_L),线路少差分信号通信,抗干扰能力强高速CAN(ISO11898):125k~1Mbps,

2024-10-02 10:18:54 749

原创 27:内部flash闪存的操作

STM32F1系列的flash闪存(掉电不丢失)包含:①程序存储器flash(存储编译好的程序),地址是以0x0800 0000开始。②系统存储器(存储BootLoader程序,不允许修改),地址以0x1FFF F000开始。③选项字节(存储配置参数)三个部分,地址以0x1FFF F800开始通过闪存存储器接口(外设)可以对程序存储器flash和选项字节进行擦除和编程。读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据。

2024-09-29 16:35:08 975

原创 26:WDG看门狗

1、看门狗的作用是监控程序的运行状态。当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。2、看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时(即程序卡死,没有执行到重置计数器的代码),看门狗硬件电路就自动产生复位信号。3、STM32中内置了2个看门狗:独立看门狗(IWDG):独立工作,对时间精度要求较低。窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。

2024-09-28 14:43:49 581

原创 25:stm32的低功耗模式

若使用WFI进入睡眠模式,唤醒条件是任意的中断,那唤醒时会接入中断,执行中断服务函数。如使用WFE进入睡眠模式,唤醒条件是事件,可以是外部中断配置为事件模式,也可以是使能中断未配置NVIC。PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能,这里我们只学习低功耗模式的功能,①VDDA供电区域为模拟供电区域,由VDDA供电,VREF为A/D转换器的参考电压供电脚。主要是给A/D转换器,复位模块,PLL供电,供电电压为2.4v。3、NRST引脚上的外部复位(复位键);

2024-09-26 10:13:13 562

原创 24:RTC实时时钟

1、备份寄存器,用于存储数据,当VDD电源被切断时,这个备份寄存器由VBAT维持供电。如果VBAT电源也被切断,那么里面的数据就会被清除。当系统在待机模式下被唤醒,或系统复位或电源复位时,也不会被复位。2、TAMPER引脚产生的侵入事件将所有备份寄存器内容清除3、用户数据存储容量:20字节r(中容量和小容量)/84字节(大容量和互联型)

2024-09-20 11:21:37 620

原创 23:SPI二:W25Q64存储器模块的使用

其中最主要的特点就是掉电不丢失。由上图所示:W25Qxx的地址是24位的,则代表地址总线是24根地址总线。一个地址则代表一个门牌号,一个门牌号的存储空间是一个字节,那么24位的地址一共有多少个字节?地址0x000 000(24位)~0xFFF FFF这之间一共有2^24(16777216)个地址数。则一共有16777216个字节。我们换算一下:16777216B = 16384KB = 16MB。所以24位地址总线的存储空间是16MB。

2024-09-20 11:18:35 777

原创 02:【HAL库】OLED模块的简单使用

2、我们将江科大的OLED.c,OLED.h,OLED_Font.h复制到HAL库过程文件里面。如上图所示:江科大将PB8和PB9配置为通用开漏输出,然后通过程序模拟I2C时序。1、我们通过CubxMX软件将PB8和PB9也配置为通用开漏输出,其他的代码不变。3、打开编译软件,添加文件,并对里面的代码进行修改。

2024-09-19 20:26:51 283

原创 22:SPI一:简单的使用

SPI是一种同步的,全双工,支持总线挂载多设备的通信协议。它特别适用于高效,快速的传输。如上图所示:单片机作为主机,其他模块作为从机。通过SPI总线进行数据通信,而SPI总线如上图结构。SPI由4条线组成:MOSI,MISO,SCK,NSS。MOSI:主机输出从机输入(主机发送从机接收,发送数据时高位先行),在进行数据传输时,主机的MOSI和所有从机的MOSI连接在一起。MISO:主机输入从机输出(主机接收从机发送),在进行数据传输时,主机的MISO和所有从机的MISO连接在一起。SCK。

2024-09-18 15:42:10 662

原创 21:I2C三:MPU6050的使用

MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景。

2024-09-15 13:42:34 843

原创 03:手动可变电阻

例如:将L1连接负极,L3连接正极,那么我们扭动L2的滑块,相当于改变R1的电阻,则L2连接的电压将会改变。由上图所示:通过线绕产生的电阻就会产生电感,那么这个电感就是寄生电感,而若绕线挨着很近,那么线圈之间也会产生电容,那么这个电容就是寄生电容。而虚线的曲线是对数曲线,在前面时,改变刻度时,阻值没有明显的变化,而越往后改变,则阻值的变化越大。如图绿色的曲线,是线性曲线,我们改变相同的刻度,则增加的阻值是一样的。由上图所示:不同的电位器有不同的锥度,其实就是阻值与改变刻度的斜率。

2024-09-13 22:09:11 326

原创 19:I2C一:程序模拟I2C通信时序

I2C通信协议和串口通信USART不同,USART是异步,全双工的通信协议。而I2C通信协议是一种同步,半双工,带数据应答,支持总线挂载多设备的通信协议。USART传输数据的时候是先传输数据帧的低位,在传高位。而I2C传输数据的时候是高位先行。由上图所示:有2条总线,数据总线SDA和时钟总线SCL。其中时钟线SCL只能由主机控制,而SDA主机和从机都可以控制。当主机向从机发送。

2024-09-12 15:32:47 1155

原创 02:(固定电阻)线绕电阻/碳质电阻/碳膜电阻/金属膜电阻/金属氧化膜电阻/金属箔电阻

R = ρ×(L/S),可以通过改变混合比列来改变ρ的大小,一般情况下石墨越多,ρ越小。如上图:金属氧化物模电阻和碳膜电阻类似,只是导体是金属氧化物,但是一般这个膜比较厚,就导致能制作出来的阻值比较小。如上图:不同色环,代表阻值不同,而右边体积不同,代表承受的功率P不同(个头越大,功率越大)如上图:不同色环,代表阻值不同,而右边体积不同,代表承受的功率P不同(个头越大,功率越大)如上图,2个电阻的碳膜的长度和面积不同,所以电阻不同。如上图:黑色的物质就是镍铬合金,通过刻制不同的图案达到不同的阻值。

2024-09-10 11:35:56 1360

原创 01:电子移动速度/电阻大小与功率大小

如上图:一个铜原子外面有一个自由移动的电子,原子核对电子有束缚立。给一个电压,驱动电子脱离原子核的束缚,当电子脱离本原子核时,逃离后可能被另外的原子核束缚。当我们增大电压后,驱动力就变大,则束缚立就变小,电子的移动的就越快了,所以电流就越大。如上图:在长度为1cm,横截面积为1mm²的铜线里面的带电量为135C。如果铜线通过1A的电流,那么电子移动的速度是多少?如上图:1cm的铜线中的带电量是固定的,当通过的电流越大,则时间越小,则电子的移动速度越快,那么电流的大小与什么有关喃?

2024-09-10 11:35:38 332

原创 16:串口通信二:使用USART发送/接收数据包

我们使用上位机个单片机发送数据包时,规定包头和包尾,将我们需要发送的数据,放在中间,数据的长度我们也可以之间规定。一般情况下HEX数据包我们使用固定长度数据包。二文本数据包使用是可变长度数据包。

2024-09-09 15:33:30 642

原创 18:DMA数据搬运

DMA是直接存储器存取,它可以提供外设寄存器和存储器,存储器与存储器之间的高速数据的传输,无需CPU的干预,这样节省了CPU的资源。简单来说DMA就是数据的搬运工。STM32中的存储器:DMA的3种搬运方式:1.存储器------>存储器(数据的拷贝)2.存储器------>外设(将某数据写入串口寄存器TDR)3.外设--------->存储器(将串口接收寄存器RDR的数据搬运到内存,避免数据的覆盖)

2024-09-03 18:46:18 1138

原创 17:ADC模数转换器

ADC就是一个模数转换器,将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。说的直观一点就是一个电压表,用于测量电压的片上外设。其中转换电压的范围0~3.3v。其中这些传感器在有外界的刺激的情况下,将会改变自身电阻的大小(如下图N1电阻),进而改变输出电压的大小。而电压的大小通过模拟输出口AO口输出。单片机可以通过ADC获取外部模块的电压值,进而做出一些动作。那么单片机是怎样通过ADC进行对外部电压的测量并转换为数字量保存在内存中喃?

2024-09-02 20:18:25 1324

原创 01:【HAL库】对GPIO的操作

创建工程时,缺少第三步。解决方法:使用bootloader对单片机进行程序的清除。使用的是STM32CubeMX+Keilv5进行HAL库的开发。软件不显示.h文件,那我们就之间添加进去方便我们学习。步骤二:打开STM32CubeProgrammer。步骤一:使用TTL模块连接STM32单片机如下图。【注】我们的代码要编写在。

2024-09-01 16:19:11 470

原创 07:【江科大stm32】:编码器通过定时器测速

编码器的转动方向不同,则输出波形的相位也不同。通过每隔1s就获取定时器TIM3计数器里面的值等于速度。

2024-09-01 09:49:39 481

原创 10:在Linux环境下编程

创建文件夹,但是好像不能在根目录 \ 里面创建文件夹。:删除文件,不是文件夹。删除文件夹:rm -r。:进入文件,对文件里面的内容进行编辑。:对编辑好的.c文件进行编译。:创建文件,要带文件后缀名。:查看文件里面的内容。

2024-08-31 09:04:30 409

原创 08:字符串

*字符串的使用*///定义字符串方式一//定义字符串方式二//定义字符串方式三i++)//方式的打印方式puts("");i++)//方式二的打印方式puts("");i < 5;i++)//方式二的打印方式//*(p+i)puts("");//方式三的打印方式puts(a);puts(b);puts(p);//方式三的打印方式return 0;

2024-08-29 17:00:27 327

原创 14:定时器五:输入捕获(补)

【代码】14:定时器五:输入捕获(补)

2024-08-28 14:56:23 366

原创 05:【江科大stm32】:定时器输出比较功能(PWM)

使用的是TB6612模块驱动电机。

2024-08-27 20:13:50 854

原创 11:定时器二:定时器中断的使用

对射式红外传感器,有遮挡D0引脚输出高电平,没有遮挡D0引脚输出低电平,①Timer.c文件的程序。②Timer.h文件的程序。

2024-08-26 19:53:24 485

空空如也

空空如也

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

TA关注的人

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