- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)
函数获取DMA中未传输的数据个数,所以要计算DMA接收到了多少个数,需要用定义接收的数组大小减去该函数返回值。串口发送什么数据就接收到什么数据。
2025-03-17 12:01:36
889
原创 使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)
例如,这里定时时间为 10ms,可设置Prescaler = 64-1;(TIM3时钟频率设置为64MHz)定时时间 = (Prescaler+1)× (Counter +1)/ 定时器时钟频率。要实现LED闪烁,还需要增加定时器回调函数,在其中添加LED闪烁功能代码。要想使用定时器3,那么需要先将其打开。此处配置系统时钟为64MHz。
2025-03-11 22:25:29
534
原创 使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)
【代码】使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)
2025-03-06 22:22:54
475
原创 【C语言】static关键字妙用
将static关键字用于函数前,那么这个函数称为静态函数,该函数将只能在当前.c文件中使用,属于内部函数,在其他.c文件中无法调用该函数。如此可以使程序可读性、可移植性更强。如下,新建了一个hal_led.c文件,在这个文件中,LED等外部设备的GPIO初始化函数仅hal_led.c这个文件中调用,不会在外部文件调用,所以在函数hal_ledConfig(void)前添加static使其仅在内部调用。
2025-01-12 06:00:00
305
原创 【STM32】LED状态翻转函数
在平常编写LED状态翻转函数时,通常利用状态标志位实现LED状态的翻转。使用状态标志位,可以轻松实现LED状态翻转,但其存在可移植性差的问题。led_turn_flag这个变量如果在其他.c文件中需要使用,则需要在该.c文件中对该变量再次进行声明,如此一来,使得程序繁琐冗长、可读性差、可移植性差。下面将介绍一种利用STM32关于GPIO库函数实现LED状态翻转,其可读性强、可移植性强。
2025-01-11 15:57:36
772
原创 【STM32】利用SysTick定时器定时1s
SysTick定时器是一个24位的倒计数定时器,当计数到0时,将从RELOAD寄存器中自动重装载定时初值,开始新一轮计数。SysTick定时器用于在每隔一定的时间产生一个中断,即使在系统睡眠模式下也能工作。
2025-01-11 00:04:17
751
原创 【C语言】高级声明
C允许用户自定义数据形式,虽然我们常用的是一些简单的形式,但根据需要也会使用到一些复杂的形式。像在使用更高级的指针类型中,就用到一些高级声明。以下列举了常用了一些高级声明,在文章后面对其每一个都有详细说明。
2024-12-25 17:39:29
678
原创 【C语言学习笔记(七)】C语言重定向输入与输出
功能实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体指stdin、stdout和stderr。stderr是标准错误流,一般吧屏幕设为默认。运行结果mywords文件最初是空的,没有任何内容,当运行完上述程序后可以看到words文件中内容传输到了mywords文件夹中。注意words.txt文件和mywords.txt文件要和.c文件放在同一个文件下。path文件名,用于存储输入与输出的自定义文件名。mode文件打开的模式。stream一个文件,通常使用标准流文件。...
2022-07-29 20:54:14
3080
1
原创 【C语言学习笔记(六)】分支与跳转(if、else、continue、break、switch)
要对紧跟在关键字switch后圆括号中的表达式求值,如果紧跟在switch关键字后的测试条件的整数值与某标签匹配,程序就转至执行匹配的标签语句,然后在遇到break之前,继续执行标签语句后面的语句。在此情况下,就像其他循环中一样,continue让程序跳出循环剩余部分,包括switch语句的其他部分。if语句的结构和while语句很相似,他们的主要区别在于如果满足条件可执行的话,if语句只能测试和执行一次,二while语句可以测试和执行很多次。else语句,if语句用于选择是否执行一个行为,if…...
2022-07-29 10:47:46
1741
原创 【C语言学习笔记(五)】while循环与for循环
while循环有一点非常重要在构建while循环时,必须让测试表达式的值有变化,表达式最终要为假,这样才能终止循环;逗号运算符有两个性质,一是,逗号运算符保证了被它分隔的表达式从左往右求值(换而言之,逗号就是一个序列点,所有逗号左侧项的所有副作用都在程序执行逗号右侧项之前发生)。所谓的“有条件”指的是语句部分的执行取决于测试表达式描述的条件,只有当满足测试条件的时候才能进入循环体。while循环中经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中的运算叫做关系运算符。...
2022-07-28 20:39:43
1716
原创 【C语言学习笔记(四)】运算符
一、基本运算符1.赋值运算符:=在C语言中,=并不意味着“相等”,而是一个赋值运算符,例如:由上,“=”的左侧是一个变量名,右侧是赋给该变量的值。赋值表达式语句的目的是把值存储到内存位置上。2.加法运算符:+加法运算符用于加法运算,使其两侧的值相加。相加的值(运算对象)可以是变量,也可以是常量。3.减法运算符:-减法运算符用于减法运算,使其左侧的数减去右侧的数。+和-运算符都被成为二元运算符,即这些运算符需要两个运算对象才能完成操作。4.符号运算符:-和+减号还可以用于标明或改变一个值的
2022-07-08 15:39:44
1110
原创 【C语言学习笔记(三)】printf()函数和scanf()函数
printf()函数和scanf()函数能够让用户可以与程序进行交流,他们是输入/输出函数。printf()函数是输出函数,scanf()函数是输入函数,两个函数都使用格式字符串和参数列表。一、printf()函数printf()函数的格式:待打印项1,代打印项2等都是要打印的项,它们可以是变量、常量,甚至是在打印之前先要计算的表达式。格式字符串包含每个待打印项对应的转换说明和实际要打印的字符。例如:请求printf()函数打印数据的指令要与待打印数据的类型相匹配。一定注意:格式字符串中的转换说明一定
2022-07-07 11:45:44
936
原创 【C语言学习笔记(二)】字符串
一、什么是字符串字符串是一个或多个字符的序列,如“I love China!”。其中双引号不是字符串的一部分。双引号只是告知编译器它括起来的是字符串。二、char类型数组C语言没有专门用于存储字符串的变量类型,字符串都被存放在char类型的数组中。数组由连续的存储单元组成,字符串的字符被存储在相邻的存储单元中,每个单元存储一个字符,每个存储单元1字节。char类型数组的末尾以字符\0结束。\0是空字符,C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是0。C中字符串一定以
2022-07-06 20:00:24
556
原创 【C语言学习笔记(一)】ASCII码转字符
一、要求提示输入一个ASCII码值(如,66),然后打印输入的字符。二、程序使用printf()函数进行强制转换。三、结果
2022-07-05 10:37:56
13240
原创 如何使用Visual Studio 2017建立一个C语言项目
1.打开Visual Studio 2017,点击文件→新建→项目;2.选择Visual C++,然后选择空项目,修改项目名称和项目存放的位置。3.项目新建成功后,右击源文件,点击添加→新建项。4.选择C++文件(.cpp),因为我们要建立一个.c文件,所以再名称这里将名称后缀改为.c(默认的是.cpp),这样我们便可以新建一个.c文件。5.新建完成后,在代码编辑窗口输出代码,然后点击调试→开始执行(不调试)。6.调试结果显示。...
2022-07-04 21:43:19
12588
原创 【STM32F103实验(八)】输入捕获
一、目的在正点原子精英版上,采用TIM5的通道1(PA0)作为输入捕获,捕获PA0上高电平的脉宽(用WK_UP)按键输入高电平,通过串口打印高电平脉宽时间。二、输入捕获简介输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成
2022-04-17 10:49:38
2155
原创 【STM32F103实验(七)】PWM输出
一、目的在正点原子精英版上使用通用定时器TIM3产生PWM控制DS0的亮度。二、分析脉冲宽度调制(PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。本实验中利用TIM3的CH2输出来控制DS0的亮度,TIM3_CH2默认接在PA7上,而DS0接在PB5上,所以需要通过重映射功能将TIM3_CH2映射到PB5上。三、程序设计PWM设置初始化步骤:(1)开启TIM3时钟以及复用功能时钟。(2)配置GPIOB.5为复用推挽输出。(3)设置TIM_CH2重
2022-04-15 18:47:30
2448
原创 【STM32F103实验(六)】定时器中断
一、实验目的在正点原子精英版上采用通用定时器3中断控制DS1每隔500ms的亮灭闪烁。二、寄存器介绍(寄存器此处只对其功能进行介绍,寄存器具体结构请自行参考《STM32中文参考手册》)本次实验主要涉及3个寄存器即控制寄存器1(TIMx_CR1)、DMA/中断使能寄存器(TIMx_DIER)和预分频寄存器(TIMx_PSC),同时还涉及了计数器寄存器(TIMx_CNT)、自动重装载寄存器(TIMx_ARR)和状态寄存器(TIMx_SR)。控制寄存器1(TIMx_CR1)主要目的是使能计数器和设置计数
2022-04-15 15:49:15
1889
原创 STM32通用定时器(一)
一、STM32三种定时器区别STM32F10X系列总共最多有8个定时器,分别是2个高级定时器,4个通用定时器,2个基本定时器。如下图是这三类定时器的区别。定时器类别 位数 计数器模式 产生DMA请求 捕获/比较通道 互补输出 特殊应用场景 高级定时器(TIM1,TIM8) 16 向上,向下,向上/下 可以 4 有 带死区控制盒紧急刹车,可用于PWM电机控制 通用定时器(TIM2~TIM5) 16 向上,向下,
2022-04-14 22:26:25
4309
原创 STM32端口复用和重映射
一、端口复用STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的。一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。复用端口初始化步骤:(1)GPIO端口时钟使能。//GPIOA端口时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);(2)复用的外设时钟使能。//串口1时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_US
2022-04-14 20:27:14
2971
原创 【STM32F103实验(五)】外部中断
一、STM32外部中断介绍STM32的每一个IO口都可以作为外部中断的中断输入口。STM32F103的中断控制器支持19个外部中断/事情请求。每个中断都设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103的19个外部中断为:线0~15 对应外部IO口的输入中断 线16 连接到PVD输出 线17 连接到RTC闹钟事件 线18 连接到USB唤醒事件 其中,STM32供IO口使用的中断线只有16个。STM32如何把16个中断线和IO口一一对应起
2022-04-14 19:34:53
3619
原创 【STM32F103实验(四)】串口实验
一、目的在正点原子的精英版STM32F1上通过串口1和上位机的对话,STM32F1在收到上位机发过来的字符串后,原原本本的返回给上位机。二、程序设计1. 串口设置一般步骤(1)串口时钟使能,GPIO时钟使能;(2)串口复位;(3)GPIO端口初始化;(4)开启中断并且初始化NVIC;(若要开启中断才需要此步骤)(5)使能串口;(6)编写中断处理函数。void UART_Init_Person(void) { GPIO_InitTypeDef GPIO_In
2022-04-12 08:56:10
3881
1
原创 串行通信简介
一、串行通信与并行通信计算机与外界的数据交换称为通信,通信分为并行通信和串行通信两种基本方式。并行通信串行通信并行通信:并行通信指各个数据位同时进行传送的数据通信方式,因此有多少个数据位,就需要多少根数据线。并行数据的特点是传送速度快、效率高,但成本高,通常只适合30m距离内的数据传送。串行通信:串行通信指各个数据按传送位顺序进行传输,最少只需要两个传输线即可完成。其传输速度慢、效率低,但传输距离远,而且可以使用现有的通信通道(如电话线、各种网络等),在集散控制系统等远距离通信中
2022-04-10 16:28:08
16103
原创 STM32—delay和操作系统共用SysTick定时器
1.SysTick定时器SysTick定时器用来产生操作系统需要的滴答中断,作为整个系统的时基。SysTick定时器可以产生周期性中断,用户程序不能随意访问它的寄存器,SysTick定时器是维持操作系统“心跳”的节律。SysTick定时器可以为多个任务许以不同的时间片,确保没有一个任务能够霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务;SysTick定时器还可以为操作系统提供各种定时功能。SysTick定时器由4个寄存器控制。2.SysTick实现延时在SMT32中,利.
2022-04-05 09:15:36
977
1
原创 STM32时钟系统
时钟系统是STM32中一个重要的组成部分,他就是CPU的脉搏,就像人的心跳一样。STM32单片机的时钟不像51单片机只有一个系统时钟,STM32有多个时钟源。STM32为什么要有多个时钟源呢?STM32本身比较复杂,外设非常多,但是并不是所有的外设都需要系统时钟这么高的频率,如看门狗以及RTC只需要十几k的时钟电路即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所有对于较为复杂的MCU一般都是采用多时钟源的方法来解决这些问题。STM32时钟系统图:在STM32中,有五个时钟源,.
2022-04-03 22:16:00
4944
1
原创 【STM32F103实验(三)】按键输入
一、目的在正点原子精英版上实现按键KEY0控制LED0状态的翻转,KEY1控制LED1状态的翻转,WK_UP同时控制LED0和LED1状态的翻转。二、硬件电路分析如下图所示,按键KEY0和KEY1一端连接在单片机PE4、PE3上,另外一端接地;按键WK_UP一端连接在单片机PA0上,另一端连接在3.3V电源上。所以在进行程序编写时,应将PE4、PE3引脚模式设置为上拉,将PA0引脚模式设置为下拉。三、程序设计1.按键端口初始化(1)端口时钟初始化。(2)端口...
2022-04-03 14:38:41
3286
2
原创 【STM32F103实验(二)】蜂鸣器
一、目的在正点原子精英板上实现蜂鸣器每间隔200ms响一次,同时用LED0进行指示(蜂鸣器响同时LED0点亮)。二、硬件电路分析LED0部分电路可以参考以下这篇博文:【STM32F103实验(一)】跑马灯_傻萌的路飞的博客-优快云博客...
2022-04-02 23:13:16
7308
1
原创 【STM32F103实验(一)】跑马灯
一、目的在STM32F103ZET6上实现LED0、LED1两个灯每间隔1秒同时闪烁。二、硬件电路分析由电路图可知:LED0-PB5,LED1-PE5。三、软件设计本次实验主要是控制GPIOB.5和GPIOE.5输出进而控制LED0和LED1的状态。其核心是对着两个引脚进行配置,配置流程如下:(1)使能端口时钟。(GPIO是挂载在APB2总线上的外设)(2)设置引脚模式。将两个引脚都设置为推挽输出模式(设置为推挽输出模式可以使该引脚输出强高低电平)(3)初始时
2022-04-02 14:48:26
2930
1
原创 【模电-低频学习笔记(二)】放大电路主要性能指标
放大电路的性能指标是衡量它的品质优劣的标准,并决定其适用范围。放电电路主要性能指标有输入电阻、输出电阻、增益、频率相应和非线性失真等。1.输入电阻输入电阻的大小决定了放大电路能从信号源获取多大的信号。对于输入为电压信号的放大电路,即电压放大电路和互导放大电路,输入电阻越大,放大电路输入端的电压值越大;对于输入为电流信号的放大电路,即电流放大电路和互阻放大电路,输入电阻越小,注入放大电路的输入电流越大。2.输出电阻放大电路输出电阻的大小将影响放大电路带负载能力。带负载能力是指放大电路输出量..
2022-03-31 00:45:43
4277
原创 【模电—低频学习笔记(一)】信号的频谱
记录模电的每一次学习,如有错误,欢迎大家指正!1.为什么提出分析信号的频谱?信号中的特征参数是设计放大电路和电子系统的重要依据。在信号分析中,为了简化信号特征参数的提取,通常将信号从时域变换到频域。信号在频域中表示的图形或曲线称为信号的频谱。2.如何实现时域到频域的变换?傅里叶变换。3.任意周期函数满足什么条件可以展开为傅里叶级数?狄里赫利条件。其内容为:(1)在一个周期内,周期信号 必须绝对可积;(2)在一个周期内,周期信号只能有有限个极大值和极小值;(3)在一个周期内
2022-03-29 20:49:55
1635
原创 【蓝桥杯-单片机学习笔记(十八)】ADC/DAC同时使用
一、要求测量电位器Rb2输出的电压并将电压大小显示在数码管上,同时DAC输出电压跟随Rb2电位器输出电压变化。关于AD、DA转换可以参看这篇博文:【蓝桥杯-单片机学习笔记(十六)】PCF8591原理与A/D、D/A转换_傻萌的路飞的博客-优快云博客_pcf8591二、核心代码//--------------------------------电压测量---------------------------------//uchar ADC_read_AIN3(){ IIC_
2022-03-19 14:38:54
1941
原创 【蓝桥杯-单片机学习笔记(十七)】24C02原理及其读写操作
一、24C0224C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。24C02支持I2C总线协议。I2C是一种双向、两线串行通信接口,分别是串行数据线SDA和串行时钟线SCL。两根线都必须通过一个上拉电阻接到电源,如图是典型的总线配置。总线上发送数据的器件被称为发送器,接收数据的器件被称为接收器。控制信息交换的器件被称作主器件,受主器件控制的器件被称为从器件。主器件产生串行时钟信号SCL,控制总线的访问状态、产生START和STOP
2022-03-15 20:04:23
5017
原创 【蓝桥杯-单片机学习笔记(十六)】PCF8591原理与A/D、D/A转换
一、PCF8591PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线上而不需要额外硬件。器件的地址、控制和数据通过两线双向I2C总线传输。PCF8591功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模转换。最大转换速率取决于I2C总线的最高速率。功能描述1.设备地址I2C总线系统中的每一片PCF8591通过发送有效地址.
2022-02-28 14:07:04
6659
1
原创 【蓝桥杯-单片机学习笔记(十五)】NE555频率测量
一、要求在CT107D平台上测量NE555产生方波的频率值并显示在数码管上。频率数据显示用5位数码管,单位是Hz,数码管最左边显示“F”。二、分析使用两个定时器实现频率的测量,一个定时器用于计数,另一个用于定时。(频率:1s内的计数值)在CT107D单片机平台上,用杜邦线将J13的SIGNAL和P34连接起来,NE555产生的信号便输入到单片机的P34引脚。P34是单片机定时器0引脚,因为这个原因,将定时器0设置为计数模式用于计数,定时器1设置为定时模式,当定时时间到达1s时将计数值读出并显
2022-02-20 16:51:04
3039
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人