- 博客(50)
- 问答 (6)
- 收藏
- 关注
原创 FLASH闪存(擦除、编译)
STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途:**利用程序存储器的剩余空间来保存掉电不丢失的用户数据 **通过在程序中编程(IAP),实现程序的自我更新在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序。
2025-05-12 19:48:29
767
原创 WDG看门狗(独立看门狗和窗口看门狗)
WDG(Watchdog)看门狗看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号STM32内置两个看门狗 独立看门狗(IWDG):独立工作,对时间精度要求较低 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。
2025-05-09 20:29:31
1067
原创 PWR电源控制/睡眠/停止/待机模式
PWR(Power Control)电源控制PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间在使用低功耗模式的时候不要只考虑如何进入低功耗,还要考虑怎么解除低功耗模式。
2025-04-22 21:22:50
620
原创 Unix时间戳/BKP备份寄存器/RTC实时时钟
BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位TAMPER引脚产生的侵入事件将所有备份寄存器内容清除(可用于拆解保护)RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲存储RTC时钟校准寄存器用户数据存储容量: 20字节(中容量和小容量)/ 84字节(大容量和互联型)
2025-04-20 22:07:47
657
原创 I2C通信协议与MPU6050陀螺仪
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角(欧拉角),常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer)(测力计):测量X、Y、Z轴的加速度3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度如果再集成一个3轴的磁场传感器,测量XYZ轴的磁场强度,那就叫做九轴姿态传感器。
2025-04-08 19:39:50
916
原创 输入模块(TM1638函数的使用)
TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、空调、家庭影院等产品的高段位显示屏驱动。
2025-03-29 18:09:51
442
1
原创 程序控制结构
f - 字符串是 Python 3.6 引入的新特性,它让字符串格式化变得更简洁,只需在字符串前加。方法是 Python 中较为常用的字符串格式化手段,能把变量的值插入到字符串里指定的位置。要留意的是,变量需先转换为字符串类型。continue: 结束本次循环,进行下一次判断。pass 是空语句,是为了保持程序结构的完整性。例子2:使用range遍历列表。此方法是把变量和字符串通过。break:跳出当前循环。运算符拼接起来,再用。例子:实现1到9的累加。,并把变量名用花括号。,一般用做占位语句。
2025-03-22 17:08:36
593
原创 编写简单的小程序
width, height:窗口的宽度、高度startx, starty:窗口左上角在屏幕中的坐标位置。启动窗口:turtle.setup(width, height, startx, starty)encodeing编码,confidence为精度,language为检测到的文本语言。基本格式:print(<表达式1>,<表达式2>,……变量的类型可使用内置函数Type()来返回变量的类型。在Python中,每个变量在使用前必须赋值,:普通的除法计算,有整数有小数。input()函数接收多个参数。
2025-03-22 16:08:27
1105
1
原创 显示模块(LCD1602,OLED)
可以直接传入一个16进制数,对相关参数进行单独设置,如:0x38(00111000)将DB4设置为1,DB3设置为1,DB2设置为1.如果想在00处输入字符“A”,那么就需要在00地址处输入字符“A”的代码。LCD1602是一种常用的字符型液晶显示器,单子符点阵位5*7或5*10,同时可显示。(就是说一共可以显示16*2个字符,每个字符由5*7或5*10个点阵表示)执行命令后,会清除屏幕的所有数值,也就是将光标移至开头的左上角。RS,RW,E接P1.2,P1.3,P1.4。,比如要显示“A”,也就是要将。
2025-03-20 20:20:26
1296
原创 MSP430单片机中断系统
终端系统是一个现代微处理器的一个重要组成部分。充分利用中断,可以简化程序和提高执行效率简言之,就是暂停正在运行的程序,转去执行中断程序,处理完中断后又继续执行主程序的过程。
2025-03-10 22:56:43
933
原创 GPIO及其应用
:仅读取引脚当前电平状态(输入模式有效),输出模式下读取值与 PxOUT 寄存器一致。:选择引脚为普通 GPIO(0)或外设功能(如 UART、ADC 等):使能内部上拉/下拉电阻(需配合 PxOUT 设置选择上拉或下拉)。:写入值直接控制输出引脚电平(输出模式有效),支持高/低电平设置。:通过置位/清零寄存器位控制引脚输入(0)或输出(1)模式,: 选择中断触发沿(0=上升沿,1=下降沿)。设置为0,为I/O模式;设置为1,为外设模式。功能(1为允许中断;0为高驱动,1为低驱动。
2025-03-02 22:23:08
1146
原创 CCS theia下载安装测试
不需要RTOS,选择编译器,再下面选择合适的工程历程,选择合适的新建,,最下面可修改项目名称,点击创建后,可能会弹出需要下载STK的下载界面,点击下载即可。如果想选择一款单片机,可以直接从下拉框中选择或直接把单片机接到电脑上,会自己检测。2.下滑,随便选一个进行测试,这里选择最简单的使用p1.0口实现灯的反转。选择自己系统的版本下载对应压缩包,比如第一个Windows版本的。只需要根据自己的需求选择安装地址,其他的可以按照默认设置,3.选择工作完成后,点击创建按钮。4.缺少文件,点击下载。
2025-02-25 15:54:10
652
原创 USART串口数据包(HEX和文本发送接收)
/声明为外部可调用,不需要指定个数//接收数据包的缓冲区#endif//声明为外部可调用,不需要指定个数//接收字符缓存区//写入数据#endif。
2025-02-16 02:52:00
289
原创 USART串口协议
没解释用来配置同步时钟输出的,包括时钟是不是要输出,时钟的极性相位等参数//开启RXNE标志位的通道//开启USART到DMA的触发通道//发送数据//接收数据//获取标志位状态//GPIO初始化,输出只需要初始化一个//波特率(我们给出函数会自己计算)//硬件流控制(直接复制参数名称,开启代码提示CTRL+ALT+空格)//检验位//停止位,0.5、1、1.5、2//字长,可选8或9位//开启//发送一个Byte。
2025-02-14 21:15:37
1236
原创 DMA直接存储器存取
DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)每个通道都支持软件触发和特定的硬件触发STM32F103C8T6 DMA资源:DMA1(7个通道)//给全局变量赋值,方便下面修改DMA使用//外设站点:起始地址//数据宽度//是否自增//存储器站点:起始地址//数据宽度//是否自增。
2025-02-11 02:40:58
1042
原创 ADC模数转换器概念函数及应用
ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围:0~409518个输入通道,可测量16个外部和2个内部信号源(16个外部就是16个GPIO口,2个内部信号源是内部温度传感器和内部参考电压规则组(常规使用)和注入组(用于突发事件)两个转换单元模拟看门狗自动监测输入电压范围。
2025-02-07 02:46:13
873
原创 TIM编码器接口函数及应用
手册14.3.12编码器接口模式有相关介绍Encoder Interface 编码器接口编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1(CH1)和通道2(CH2)//开启GPIO通道//如果外部模块默认输出高电平,就配置上拉输入,默认输入高电平//如果外部模块默认输出低电平,就配置下拉输入,默认输入低电平。
2025-01-24 17:19:10
593
原创 TIM输入捕获函数说明及应用
IC(Input Capture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,将当前CNT的值锁存到CCR中(将当前CNT的值读取出来,写入CCR中),可用于测量PWM波形的频率、占空比、脉冲间隔(和频率差不多)、电平持续时间(和占空比差不多)等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量//ic因为4个通道共用一个函数,所以多出一个参数用于具体选择配置哪个通道的void。
2025-01-22 12:41:37
827
原创 TIM输出比较理论及实操
OC(OutputCompare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能PWM(PulseWidthModulation)脉冲宽度调制在具有惯性的系统(比如电机,电机断电后不会立马停止)中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。
2025-01-20 14:21:56
1075
原创 TIM定时中断
TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器,预分频器,自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型计数器:用来执行计数定时的一个寄存器,每来一个时钟,计数器加1,分频器:可以对计数器的时钟进行分频,让这个计数更加灵活。
2025-01-16 20:40:52
828
原创 stm32中断定义流程及应用
EXTI(Extern Interrupt)外部中断.EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序**支持的触发方式:**上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断**通道数:**16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒(总共20个通道)中断响应事件响应。
2025-01-12 21:23:13
1033
原创 GPIO输入及两个应用案例
/该.c文件用于定义函数//定义LED初始化函数//定义一个结构体//打开0口和1口//灯亮//灯灭//灯亮//灯灭//LED1取反操作//读取当前LED的输出状态}else{//LED2取反操作}else{//初始化按键//这里需要读取按键所以使用GPIO_Pin_IPU(上拉输入)//输入模式下这个参数其实是没用的//获取按键的信息(按键的检测)//读取到0则表示按键按下//延时消除抖动。
2025-01-08 21:37:20
896
原创 GPIO口的常用函数说明及简单应用
注:BitAction是一个枚举类型我们把LED灯的脚反插,这样LED就是高电平点亮的方式,LED也是正常闪烁的。说明在推挽模式下,高低电平都是有驱动能力的。换成开漏模式,发现LED不亮,说明开漏模式的高电平时没有驱动能力的,LED换回正常的接法,发现正常亮起,说明开漏模式的低电平有驱动能力。
2025-01-06 19:29:13
1065
原创 stm32新建工程
导入User,Start,Library文件总结在项目的目录下创建三个文件夹命名为User,Start和Library,然后按照如下操作在固件库的devicesport——>arm内找到启动文件,再找到stm32f10x和system的两个文件,将其复制到Start文件夹下,再找到coresupport的两个文件(core_cm3.h)并粘贴到Start文件夹下,这样start文件的文件就复制完成了找到标准外设驱动的文件(src下和inc下),全部复制到Library文件夹下。
2025-01-06 01:27:15
1285
1
原创 stm32入门元件介绍
面包板:通过简单插接的方式,将元件模块插在面包板的孔洞中,再借助跳线和飞线,即可完成各式各样的硬件电路,根据自己的设计思路,可随意连接和更改电路,无需焊接,使用方便,是电子爱好者的神器。
2025-01-04 14:10:46
525
原创 stm32学习
学习的内容是根据哔哩哔哩平台的江协科技stm32教学。本栏目的内容是对于stm32入门的学习。栏目的内容是笔记的分享,重在记录学习。同时可以一起解决stm32的问题。
2025-01-04 13:13:48
205
原创 [C语言进阶]数据存储与数据大小
char //字符数据类型short //短整型int //整型long //长整型long long //更长的整型 (C99类型才添加)float //单精度浮点数double //双精度浮点数//c语言没有字符串类型大端【字节序】存储:(逆顺序)把一个数据的高位字节序(最高有效字节)的内容存放在低地址处,把低位字节序(最低有效字节序)的内容存在在高地址处。就是大端字节序存储。小端【字节序】存储:(正常顺序)
2024-11-18 19:12:30
958
原创 VHDL基本结构和逻辑示例
library and package:相关库和软件包(相当与c语言的头文件)entity:实体(描述输入输出的结构)architecture:结构体(又称构造体,描述结构的构造和功能)
2024-10-14 20:29:05
708
原创 调试意义、步骤及方式
一只死在继电器上的飞蛾,被戏称为计算机史上的一个“bug”。调试便是找bug的过程。Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序Release称为发布版本,它往往是进行各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用使用Debug和Release分别进行运行后,文件夹中会产生对应的两个文件使用Debug版本可以进行调试等操作,Release版本则没有调试信息。
2024-10-07 00:51:35
1178
原创 结构体的声明、初始化及传参等
如果没有使用变量列表创建对象,那么可以使用struct 名称 变量名称,来创建结构体变量。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。这种写法与上面的写法一致,不推荐上面的结构体列表写法。上面的print与print1中通常采用print函数。结构的成员可以是标量、数组、指针,甚至是其他结构体。函数传参的时候,参数是需要压栈的。结构是一些值的集合,这些被称为。上面声明的变量列表可有可无.
2024-09-26 15:08:05
385
1
原创 操作符详细解析
逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型的大小(以字节为单位)对一个数的二进制按位取反– 前置、后置–++ 前置、后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换。
2024-08-31 20:19:04
1085
原创 数组(一维、二维)等详细介绍
因此,当你对这个指针加1时,它会跳过整个数组的长度,指向紧接着这个数组后面的内存位置。我们可以看出第三个(&arr+1)与前面的地址差了(十六进制28与50)40格字节(arr[10]),所以&arr表示整个数组的地址。,加法的步长并不是简单的字节增加,而是根据指针所指的数据类型来决定。数组的下标规定从0开始,如果数组有n格元素,那么最后一个元素的下标就是n-1。sizeof(数组名),这里的数组名表示整个数组,计算数组的大小,单位是字节。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
2024-08-28 01:12:48
1843
原创 函数递归必要条件及例子
函数调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明中有直接或间接的调用自身。一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的的问题来求解,递归策略。只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少程序的代码量。递归的主要思考方法在于:把大事化小。
2024-08-27 13:43:02
1023
原创 函数参数声明定义静态库的生成
自定义函数也需要包含这些内容。不一样的是这些都是我们自己设计的,有更大的空间。1//函数的定义int max(int x, int y) {//调试的时候(f11)可进入函数调试x : y);int a = 10;int b = 20;//函数的调用//这里进入函数调试函数的定义是指函数的具体实现,交代函数功能的实现。函数的定义顺序是有要求的系统的扫描代码的顺序是从上到下的,add函数定义在main下面,但系统扫描到add被调用时,在之前没有发现有add函数的存在。
2024-08-26 02:38:56
2269
原创 分支循环语句和getputchar的用法
scanf与getchat共用一个输入缓冲区,当第一次输入密码时,输入缓冲区被加入了密码和换行符(\n),后密码被password变量取走,输入缓冲区就剩下了一个换行符(\n)。与while循环不同的是,do…如果为真,则执行循环体中的代码,然后再次判断条件表达式,如此往复,直到条件表达式为假时退出循环。当我们获取过了一遍数据,第二次获取其他的键盘数据的时候,原本输入缓冲区的值将会是10,一个换行符的大小(\n)结束的表达式等0,不是判断是赋值,条件为0,即条件为假,就不执行循环语句。
2024-08-25 15:17:06
1087
原创 什么是结构体?
结构体指针变量,声明方式会稍微复杂一些,因为我们需要指定。使用指针变量打印结构体成员,使用箭头运算符。注:下方的print函数是自定义函数,结构体是把一些单一类型的组合在一起。使用函数输出,结构体成员,原理同上;定义结构体,创建结构体实例,并输出。,是自定义的函数名,不要理解错了。
2024-08-24 17:43:14
306
原创 指针地址指针变量
指针就是用来存放地址的。我国的国土面积大,但人均占有少,合理分配极为重要。以一栋楼房为例子,一层10户,5层便是50户。送外卖若是只知道目标在这一栋中,而无门牌号及其他的信息,只能挨家挨户的找过去,无用的消耗巨大。若是有门牌号及详细的地址信息,便可省去不必要的麻烦,即可节约时间减少占用。本章节对的指针亦是如此。内存会划分一个个的内存单元(一个内存单元的大小为:1byte每个内存单元都有一个编号使用取地址符“&”获取指针地址打印指针a的地址就是当前4个字节中的第一地址,首地址。
2024-08-23 12:29:49
1043
空空如也
Android studio代码不知道怎么运行
2023-06-18
微信开发小程序使用wx:for 获取图片转变为轮播图只有显示一张图片怎么办?
2023-03-16
python中文件的"r"和"w"用法,变量的定义赋值问题
2023-01-06
要怎么把app,javaweb后端,还有数据库联系起来
2022-12-12
idea输出字符串数组的字节码,怎么解决
2022-10-09
模拟机无法完全显示Android studio的布局,如何解决?
2022-10-05
jsp的${}不起作用
2022-09-26
Android studio在修改layout_width属性时闪退
2022-09-20
数据库对查询结果的排序为什么长这样
2022-07-06
锚点被下方的所有链接给连到[提问]
2022-06-24
为什么的答案会是这个样子
2022-06-22
为什么第一行出现了编译错误?
2022-01-09
看到不大懂,请求支援
2022-01-03
Java后端与web前端
2021-12-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人