- 博客(38)
- 收藏
- 关注
原创 TIM编码器接口
2.配置时基单元(此时编码器接口当作外部时钟接管时钟) 3.输入捕获单元配置(这里只用到滤波器和边沿检测极性选择)4.配置编码器接口5.开启定时器。编码器接口简介:可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT增减,从而指示编码器的位置,旋转方向和增速。当出现某个边沿时,判断另一项的高低电平,就可判断正转或者反转,然后进行自增或者自减。一般来说定时中断可以在中断时,不需要等待定时任务,让主循环持续去做其他事物。每个高级定时器和通用定时器都拥有一个编码器接口。
2026-10-25 19:04:30
173
原创 STM32-TIM输入捕获
IC(输入捕获),在输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值会被锁存到CCR中。用于测量PWM频率和占空比等数据。每个高级定时器与通用定时器都有四个输入捕获通道。
2026-10-13 19:39:20
218
原创 STM32-输出比较
输出比较功能介绍:OC:输出比较。输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1,置0,反转操作,用于输出一定频率和占空比的PWM波形。每个高级定时器和通用定时器都有4个输出比较通道。高级定时器前三个通道拥有额外的死区生成和互补输出。比较输出通道(通用定时器):CNT(计数器)与CCR1(捕获比较寄存器)两个的比较值给输出控制器传一个信号,输出模式控制器通过这个值改变输出oc1ref高低电平。第二部分是一个极性选择,为寄存器写0就走上面不反转,为寄存器写1就走下面电平取反。
2026-10-12 17:28:19
191
原创 TIM定时中断
定时器三种类型基本定时器内部框图:预分频器通过给值使分频控制多久数一次,例如:给0时是系统原来的75MHZ,给1时是75/2MHZ,因为是16位最大给65535。CNT计数器用来接收记了多少数 自动重装寄存器负责设定设定值达到之后触发中断,并清零整个流程结束之后会产生一个向上的更新中断通往NVIC更新中断就能得到CPU相应了,一个向下的更新事件,用来触发内部其他电路的工作。
2026-10-10 18:09:42
220
原创 STM32-OLED显示屏与EXTI外部中断
有机发光二极管OLED硬件电路:4针脚的右边两个针脚提供电源,剩下两个是I2C通信引脚,这里会使用GPIO口模拟I2C通信,因此可以接任意GPIO口。7针脚也同理,两个供电,其余是SPI通信引脚,如果是GPIO口模拟SPI通信,则可以接任意GPIOEXIT外部中断EXIT可以检测指定的GPIO口的电平变化,当指定的GPIO口发生电平变化时,EXIT立即向NVIC发送中断申请,经过NVIC裁定后即可中断CPU主程序去执行EXIT对应的中断程序。支持的触发方式:上升沿/下降沿/双边沿/软件触发。
2026-10-07 19:31:31
283
原创 STM32-GPIO输出以及按键控制LED&光敏传感器控制蜂鸣器
1.光敏电阻传感器2.热敏电阻传感器3.对射式红外传感器4.反射式红外传感器他们通过传感器原件(光敏电阻/热敏电阻/红外接收管)的电阻会随着外界影响而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出模拟电压输出就是图中的1,通过N1和R1进行电阻分压输出模拟信号(两个分压可以类比上拉下拉电阻)。数字输出就是图中的2,通过对AO二值化输出(运算放大器当比较器)。
2026-10-06 19:55:41
194
1
原创 STM32-LED闪烁·LED流水灯·蜂鸣器
操作STM32的GPIO的三个步骤:1.使用RCC开启GPIO时钟。2.使用GPIO_Init函数初始化GPIO 3.使用输入或输出函数控制GPIO总共用到RCC与GPIO两个外设。
2026-10-06 15:03:33
176
原创 STM32-GPIO
一种控制方式是通过输出寄存器来设置(普通的IO),另一种是通过片上外设进行控制。两种控制方式通过数据选择器接到了输出控制部分。如果只想要对输出寄存器的某一位进行设置,因为寄存器控制16个端口。并且只能进行整体操作,就只能用位于位或操作较为繁琐。而位设置/位清除寄存器可以直接对想要操作的端口置1或清0.如果想对某一位进行置1操作,在位设置寄存器的对应位置写1.想对某一位进行清0操作,在位清除寄存器的对应位置写0.
2026-10-05 15:40:30
211
原创 STM32-新建工程
Start工程分组中的startup_stm32f10x_md.s是启动文件,作用调用SystemInit(初始化CPU,配置好闪存接口和时钟),然后调用mian函数将程序交给main函数。工程里建立对应的Start,User,Library同名称分组,然后将工程文件夹内的文件夹添加到工程分组中。并且Start里也设置了其他中断,达到触发条件时会执行,这些中断函数在User中的stm32f10x-it.c中。工程文件夹里设置Start,User,Library文件夹,复制固件库文件夹到工程文件夹。
2026-10-04 22:08:34
231
原创 STM32
砖红色:与电源相关的引脚;有FT则表示其可忍受5V电压,如果没有FT,需要5V的电平就需要加装电平转换电路。蓝色:与最小系统相关的引脚绿色:I/O口、功能口相关引脚。
2026-09-28 21:04:06
214
原创 蜂鸣器提示音和播放音乐
蜂鸣器是一种将电信号转化为声音信号的器件,常用来产生按键音,报警音等按键信号。蜂鸣器分类:1.有源蜂鸣器:自带振荡源,将正负极接上直流电压就能持续发出声音,频率固定。2.无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,频率可变。有源:只需要IO口Buzzer=1,延时Buzzer=0.无源:需要不断反转IO口,Buzzer=!Buzzer。
2026-09-21 11:50:26
98
原创 AD/DA
模拟--->数字的转化,将模拟信号转换为计算机可操作的数字信号将连续变化的模拟信号(温度,电压)转化为单片机可以识别的数字数值。数字--->模拟的转化,将单片机输出的数字量转化为,转化成连续变化的模拟电压信号。AD:采集外部模拟量,给单片机读(进单片机)DA:单片机输出数字,变成模拟电压(出单片机)AD 转换通常有多个输入通道,用多路选择开关连接至 AD 转换器,以实现 AD 多路复用的目的提高硬件利用率 AD/DA 与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
2026-09-20 16:18:18
169
原创 直流电机驱动(PWM)
一种将电能转化为机械能的装置。一般有两个电极,正接时正转,反接时反转电机驱动电路:直接驱动:相当于三极管驱动,其中D1二极管是为了保护电路(因为停止供电时,电感B1会感应高电压)H桥驱动:由左上流入右下,或者由右上流入左下。PWM是脉冲宽度调制,在具有惯性的系统,通过对脉冲宽度的调制,来获得所需的参量。通俗点就是,停1ms转1ms,停5ms转1ms,通过惯性来控制速度。
2026-09-17 12:20:14
79
原创 DS1302实时时钟与可调时钟
三个相关解释如上注意:1在写出时整个I\O都由单片机控制,再读入时I\O前半部分是由单片机控制,后半部分由DS1302控制。2.I\O前8bit是命令字节(command),后8bit是数据字节(Data)。
2026-09-13 19:18:35
36
原创 AT24C02(I2C总线)以及AT24C02存储和秒表(定时器扫描数码管)两个案例
一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永远保存的数据。存储介质:E2PROM(电可擦除可编程 ROM)通讯接口:I2C 总线容量:256 字节数据存储器(RAM):储存速度快,掉电丢失。程序存储器(ROM):存储速度慢,掉电不丢失。SRAM:靠触发器电路存储,不需要刷新/扫描。速度最快,成本高DRAM:靠电容充放电存储,因为电容会漏电,所以需要不断扫描给电容补充电荷。Mask ROM(掩膜 ROM):出厂固定,不能写入。
2026-09-13 16:44:24
87
原创 LED点阵屏
LED点阵屏有多个独立的LED组成,按像素多为8*8(8的倍数,大规模点阵屏由多个很多的小点阵屏组成。由于点阵屏是列共阳,行共阴所以不能同时控制所有LED,只能通过快速扫描的方式,才能使得显示出图形。其中列直接由IO口控制,而行需要与74H595进行链接扩展IO口(节约)
2026-09-11 16:38:02
134
原创 51单片机定时器
12MHz晶振 → 1机器周期 = 1us → 每次计数 = 1us 定时时间 = (65536 - 初值) × 1us 初值 = 65536 - (定时时间(us) / 1)有嵌套=多级中断系统,无嵌套=单级。:是16位计数器,最大能记65535,每接收时钟传来的脉冲就会加1,当到65535时就会发生溢出,随后进入中断系统申请中断。:CPU在干一件事时,外界紧急事件请求会中断原本的运行,而去干紧急事件,完成之后继续完成原来的事。(65536 × 1us),假如想每1s中断一次,需要多次中断累加。
2026-09-11 09:47:57
36
原创 模块化编程与矩阵键盘(密码锁)
就是将代码按照功能拆成一个个“模块”,每一个模块,而不是把所有代码都堆在 main.c 里。也就是说.h文件就是模块对外的接口.h文件的代码示例:1.首先要有函数声明 2.— 头文件保护(防止同一个头文件重复使用。
2026-09-08 18:09:34
189
原创 静态动态数码管演示
一个数码管由八个LED段组成,由顺时针ABCGEF,中间为G,小数点为DP。但是左图有10个引脚,其中引脚3,8是公共端。这八个LED的一端各自连到A~G和DP引脚,另一端全部接到公共端(3,8).右端第一个是共阴型链接,公共端(3、8脚)接 GND(相当于接地电平为0),给某个段引脚输出高电平,对应的 LED 就亮。共阳型连接就是共阴型连接的取反(~)。
2026-09-07 11:19:35
228
原创 独立按键与LED灯
while(1) // ① 死循环(超级循环),永不退出。// ③ 延时 20ms,跳过按下抖动。if(P3_1==0) // ② 检测按键按下(低电平有效)~LEDNum = 1111 1110 → P2.0输出0,其余输出1 → 最低位LED点亮。按键抖动是机械触点在按下/松开瞬间产生的几毫秒电平抖动,消抖就是想办法把这"假信号"过滤掉。1是判断是否被按下(低电平)4是等待松开 5是松开后做的动作。
2026-09-01 18:17:43
197
原创 c51单片机
STC89C52 的p2端口寄存器,直接控制 P2.0~P2.7 共 8 个引脚的电平。往这个寄存器写值,对应引脚立刻输出高/低电平。为什么 P2.0 = 0 能点亮 LED?P2.0 = 0P2.0 = 1其他 7 个引脚,都是高电平,对应的 LED 不亮。
2026-08-30 21:23:00
196
原创 C语言位操作
1.如果要的数比较少位为1,大部分位为0,则可以通过连续很多个1左移n位得到。2.如果要的数比较少位为0,大部分位为1,则可以通过先构建其位反数,然后再位取反得到。3.如果想要的数中连续1的部分不止一个,那么可以通过多端分别构造,然后再彼此位与即可。C语言宏定义 #define宏是预处理指令,预处理阶段做简单文本替换,不做类型检查,不占运行时间,不是函数。
2026-08-16 22:58:21
162
原创 C语言高级进阶3-C语言文件操作
文件:就是用于保存数据的数据集合。C语言有文本文件 和二进制文件。但是在磁盘中所有文件都是二进制的,所以可以将文本文件看作特殊的二进制文件。文件缓冲区:内存里的临时存放点。当写入时(fputc fwrite)先存放到文件输出缓冲区,再写入文件(磁盘)当读取时(fgetc fread)先去缓冲区读数据,空了再把文件数据大批量存放缓冲区,再读取缓冲区FILE数据类型:是一个结构体数据类型,内部封装了文件操作所需的所有信息。文件指针:就是指向FILE结构体类型的指针。通过文件指针来对文件进行操作。
2026-07-02 12:22:05
147
原创 C语言高级进阶(二)
主要内容:typedef指针定义 | 数组指针 | 函数指针与指针函数 |字符串与指针|字符串处理函数 | 文件拷贝与结构体 | 文件模块封装 || |
2026-06-18 18:53:42
230
原创 C语言高级进阶
什么是结构体:把多个不同类型的变量打包成一个新类型。先声明模板,再定义变量,然后初始化,用。访问成员!注意点:1.定义结构体的关键字为 struct 2.在定义完结构体后有;3.赋值时也需要struct.4.通过.(点运算符)访问成员。
2026-06-07 13:53:58
161
原创 C语言编程启蒙
数组定义:<类型>变量名称[数组数量];上面是标准格式,下面是变长数组。数组是一个容器:其中所有的元素都是同一类型。一旦创建不能改变大小。数组中的元素在内存当中是紧密排列的。数组的初始化:全部初始化:int arr[5] = {1,2,3,4,5};部分初始化:int arr[5] = {1,2,3}其余补零全零初始化:int arr[5] = {0};数组的使用:都是用for来遍历数组1.遍历打印数组2.数组的拷贝3.数组清零(初始化)等等。
2026-06-01 16:16:36
237
原创 天才初来---c语言初体验
基本数据类型:char short long int float double void(包括了整型,浮点型,空类型)数组、结构体、共用体、枚举正数的原码反码补码都是一样的原码概念:是这个数的二进制表示,占几位,完全看这个变量是什么类型。(八位)只不过首位是他的标至位,当是正数时首位为0,负数时为1。反码:复数的补码除了标志位,其余位置取反。补码:就是在反码的基础上+1原码,反码,补码主要是为了解决计算机计算减法。
2026-05-29 16:42:18
193
原创 AI人工智能初体验
主要内容:自然语言处理(NLP)基础···词向量概念···基于deep seek实现控制台输出···机器学习KNN算法原理···KNN模型训练评估检测全流程···sklean库···模型超参数调参和预测机器学习与深度学习的区别:机器学习需要人手动的去提取对象的特征,因为人去总结特征比较难(因此深度学习改成了让机器在海量的数据中提取特征.(将特征提取也纳入了学习过程本身)深度学习环境安装:下载Minconda:是包管理器和环境管理器。而python自带的pip只是包管理工具。
2026-05-28 12:06:14
205
原创 关于python封装编程
主要内容:函数的定义与调用···型参与实参的使用···python类和对象···对象实例化···类成员访问与权限|···类方法分类···继承。def __init__(self, a, b, c, d):(其中self是指创建的那个对象,abcd就是赋值的属性)导入模块需要import,可以导入整个模块(并重命名),可以导入模块中的某个函数。例如:print(__name__)在当前文件直接执行,会输出__main__型参与实参的使用: 形参(函数定义时里的占位名字)实参(调用时的真实数据)
2026-05-24 13:40:21
35
原创 路由传参以及注意事项
什么是路由传参:FastAPI用来开发后端的API接口,客户端可以发送请求,当请求传参是通过路由路径的话,就是路由传参。传参作用:传参就是客户端传给后端,后端解析出传参数据,后端根据这个条件去数据库捞对应的数据再返回。注意点3:路由传参只会传一些简单的值,因为传的参数会作为地址的一部分,而地址又有长度限制。没数据库时:让同一个接口函数,根据不同输入,执行不同逻辑 / 返回不同结果。解决方法:将/emp/all提前,因为路由是按照顺序匹配的。注意点二:路由路径完全相同,请求函数不同时,也不会报错。
2026-05-14 20:05:03
43
原创 路由分发解释与操作
第二行导入shop变量, 第四行用来加载分路由。实现这两步分路由与主路由才能完成绑定、整合。第二行创建了shop这个新路由,并且将接口文档分组标签分类到购物车。解释:把不同功能的接口写到不同的模块里,最后统一组装。解释:首行是导入APIRouter专门用来路由分发。打开接口文档就能看到已经创建的购物车模块。优点:分模块、好管理。
2026-05-11 23:07:10
24
原创 FastAPI路由解释与上一部分关于接口文档(如何打开与修饰)问题
注意点:当输入完启动命令,在浏览器访问地址时只有GET方法才不会出错,想查看put,delete等方法需要打开文档路径,只需要在地址后面+ /docs 就会出现下图(有一些多余的)Fast启动方式:在Terminal输入uvicorn main:app --reload(--reload可省略)为什么说路由是一种映射关系:当浏览器发送一种发请求,当请求路径刚好与路由的路径一样,就会自动调用函数。例:其中路径是(“/”),请求方法是get, 函数是位于@app.get("/")下的函数体。
2026-05-11 22:24:03
52
原创 FastAPI新手快速入门
api接口其实就是应用程序器对外提供操作数据的入口,这个入口可以是函数、方法或者url接口当客户端调用入口,应用程序会执行对应代码操作,完成相对应的功能(应用服务器只负责对外提供统一API,根据请求操作数据并且返回数据json格式)RESTFUL:定义api接口的设计规范 这是一种面向资源开发的编程模式 认为后端开发就是提供数据的。
2026-05-10 23:01:32
384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅