- 博客(351)
- 资源 (5)
- 收藏
- 关注
原创 按键与中断
没按下时KEY1连接R16到3V3,所以没按下时是高电平,按下时导通到GND,按下是低电平按键是输入,按键对应的GPIO这个不需要设置上拉和下拉。
2026-01-03 20:10:29
67
原创 STM32F407 systick延迟
SystemCoreClock:STM32F4 的核心时钟(默认 / 常用为 168MHz,即 168,000,000 Hz)所以 168MHz = 168 × 1000000 次 / 秒 = 168000000 次 / 秒。168,000,000/1000/1000=168次/us,1us有168次,要多少us乘多少。MHz(兆赫兹) = 10^6 Hz(1 兆 = 100 万)Hz(赫兹) = 「次 / 秒」(每秒完成的周期数)168MHz 是 STM32 内核时钟的频率。
2025-12-27 22:29:12
158
原创 机械狗软件部分
/---按键//按键标志//按键标志//上次按键时间//消抖时间 ms//上次按键时间//消抖时间 ms//---ADC定义//分压器比例(输入电压到ADC电压的比例)//分压比(8.4倍缩小)//电压范围(电池电压)//电压为0%时//电压为100%时//采样次数//计算电池电压//---舵机//舵机引脚//---屏幕//SCL引脚5 SDA引脚4//---WIFI账号密码const char *ssid ="猪八戒";
2025-12-22 22:01:05
327
原创 【梅花】2.工程模板的搭建
国内所有的STM32的板子主时钟晶振和那个STM32官方板子上的主时钟晶振是不一致的。如果没有定义HSI_VALUE,HSI_VALUE的值就是16000000。国内基本8M,官方基本25M,所以要修改HSI_VALUE和PLL_M。分频器PLL_M 也修改为8,和HSI是匹配的。
2025-12-15 00:10:47
201
原创 9.5 【定时器】输入捕获
比如捕获上升沿,如果选择1分频,那每出现一个上升沿,右边就会触发一个cc1事件,执行1次拍照动作,如果选择2分频,就要出现2次上升沿,才会产生一个cc1事件,并且进行拍照,依次类推,一般都设置1分频,用的比较少。通道1和通道2有交叉引脚的箭头,通道3和通道4有交叉引脚的箭头,说明它们的信号是可以交叉引用的。CH1捕获上升沿,此时CNT=2,就会拍照给事件cc1,那CCR1=2。CH2捕获下降沿,此时CNT=8,就会拍照给事件cc2,那CCR2=8。输入滤波模块是用来滤除输入信号这些细小的毛刺的。
2025-12-13 23:14:24
211
原创 机器狗原理
每一个舵机大概要200-250mA电流,4个舵机就要差不多1A的电流了,4个舵机要1A,加上oled等其他的,要1200mAh的电池才行,如果要买小了,机器狗可能不动,一卡一卡的一个电池充电后满电4.2V,那两个电池串联就8.4VLDO稳压搞两次目的是5V给舵机供电,3.3V给OLED屏幕供电如果1117只搞一个5V,因为4个舵机要1V,还有OLED屏幕,而1117数据手册是1V,这样会很烫。
2025-12-08 21:31:31
260
原创 9.4 呼吸灯实验
通过呼吸灯实验来看一下输出比较在实际编程中是如何写代码的原理:Tim_CH1正常输出配置PA8,Tim_CH1N互补输出配置PB13,让两个灯交替闪烁通过调整CCR1就可以控制PWM信号的占空比可调输出比较模式设置PW1,当CNT<CCR的时候,OCxRef输出高电压,否则输出低电压。
2025-12-03 11:46:18
787
原创 9.3【定时器】输出比较
定时器的4个通道输入捕获用来测量外部输入信号的一个时延参数,比如测量输入信号的周期、占空比、脉冲宽度等等所有和时间有关的参数寄存器的右边是输出比较,输出比较的作用是通过定时器去产生精确定时的方波信号,然后通过引脚把方波信号输出出去,因为此时的方波信号是通过定时器产生的,定时器本身时间精度就是特别高的,所有它产生的方波信号的精度也是特别高的,所以我们可以使用方波信号驱动各种各样的外部设备,可以达到非常好的效果。
2025-11-30 22:05:14
479
原创 关于C51的中断
C51有5个中断,外部中断0(INT0),外部中断1(INT1),定时器中断T0,定时器中断T1,串口中断(RX TX)定义外部中断名,C51函数名可以随便,只要有后面的interrupt有标识就行,不像32。比如使用外部中断0,先定义一个函数,直接在main函数中调用。比如INF0 也就是。
2025-11-29 12:32:37
176
原创 9.1【定时器】时基单元
单片机内部所有跟时间有关的操作几乎都会用到定时器定时器分为3种,高级定时器、通用定时器、基本定时器功能最全的就是高级定时器,在高级定时器基础上阉割一部分功能就得到通用定时器,再阉割一部分功能就是基本定时器对于STM32F1系列的定时器来说内部最多有14个定时器,其中定时器1和定时器8是高级控制定时器,定时器6和定时器7是基本定时器,定时器2-5和9-14是通用寄存器定时器总体的结构框图。
2025-11-24 21:30:41
754
原创 数 码 管
Write74HC164是基础的 “单字节串行发送” 工具,WriteDisplayArray则是基于它实现的 “多字节批量发送” 功能 —— 前者负责将单个段码拆分为串行信号,后者负责协调多个段码的发送顺序和初始复位,共同完成多位数码管的显示驱动。关键逻辑:利用 74HC164 的级联特性(前一级的串行输出接后一级的串行输入),先发送的数据会被后发送的数据 “推” 到后续寄存器,最终所有Len个段码会分别存入对应的 74HC164,并行输出驱动多位数码管。每次循环先拉低时钟PCLK=0,准备数据;
2025-11-15 16:38:55
273
原创 STM32F103配置寄存器
以引脚Pin0为例,GPIOx_CRL的低 4 位(MODE0[1:0]和CNF0[1:0])定义其配置:MODE0[1:0]:配置输出模式的速度(输入模式时为 00)。00:输入模式(复位状态)01:输出模式,最大速度 10MHz10:输出模式,最大速度 2MHz11:输出模式,最大速度 50MHzCNF0[1:0]:配置引脚的工作模式(输入 / 输出类型)。输入模式下:00:模拟输入01:浮空输入10:上拉 / 下拉输入11:保留。
2025-11-12 16:49:25
355
原创 智能家居项目-搭建工程
如果定义了 STM32F10X_CL 宏(表示使用 STM32F10x CL 系列芯片,如 STM32F105/107),则默认外部晶振频率为 25MHz(25000000 Hz)。如果没有定义 STM32F10X_CL(即使用普通 STM32F10x 系列,如 STM32F103),则默认外部晶振频率为 8MHz(8000000 Hz)。HSE是8MHz,SYSCLK是72MHz,所以要做 PLL 倍频(9倍频)得到 72MHz 系统时钟。对于普通系列芯片,默认定义系统时钟频率为。)对应的时钟配置函数。
2025-11-10 16:00:10
203
原创 8.2 时钟数编程
我们写的代码会被烧录到Flash模块当中,当单片机运行的时候,我们Cortex-M3内核会在Flash当中把代码一条一条读出来,然后放在内核里面去执行,但是读取Flash的速度远远赶不上内核执行代码的速度,所以为了解决这个问题,在内核和Flash中间加一个缓冲区,Flash提前把下一条要执行的指令放在缓冲区,当内核需要指令的时候,内核直接从缓冲区里面读取指令,这种叫指令预取。带颜色的代表可开关的,灰色底色的代表默认状态下关闭的,绿色底色的代表默认状态下开启的。第四步切换SYSCLK的来源。
2025-11-03 16:52:30
774
原创 8.1 时钟树
中间的粗树枝对应AHB分频器,分频后产生的分频信号就是HCLK,使用HCLK继续给它分频,这里各自有两个分频器,经过APB2分配器得到是PCLK2,PCLK2就会分配给左上面那些树叶,经过APB1分配器得到是PCLK1,,PCLK1就会分配给右上面那些树叶。左边的大树时钟频率比较高,一般是几十MHz,右边的小树时钟频率比较低,一般是几十KHz。因为内部的时钟源位于单片机的内部,虽然使用起来比较方便,但是他们精度不高,如果对精度有要求的话就要外接时钟源,如果没有要求,用内部的就行。Internal表内部的。
2025-10-26 22:51:39
400
原创 6.3 串口中断编程实验
通过电脑上的串口调试助手来控制板载LED的闪亮速度比如发送0,板载LED慢闪,发送1,板载LED正常速度,发送2,板载LED快闪。
2025-10-14 00:12:03
313
原创 6.1中断的概念
假设串口的波特率115200(常用),我们使用的串口数据帧格式(1位起始位+8位数据位+1位停止位),也就是每传输10个位,就会传输1个字节,用115200/10=11520,得到串口每秒最多可以接收11520个字节,每个字节接收的时间大约0.1ms左右。这个0.1ms远远小于200ms,如果在闪灯的过程中可能有大量的字节发送到单片机中,而我们只有等到闪灯结束才读取数据,就会覆盖前面的,导致数据丢失。比如发送0,板载LED慢闪,发送1,板载LED正常速度,发送2,板载LED快闪。很多标志位都可以采用中断。
2025-10-12 20:17:32
327
原创 关于OLED0.96寸和1.3寸
0.96寸OLED分辨率128*64 SSD13061.3寸OLED分辨率132*64 SH1106对比了江协和铁头的OLED感觉还是江协的OLED封装比较好。
2025-10-12 14:26:32
196
原创 软硬I2C
软 I2C 无需像硬 I2C 那样依赖大量标志位硬 I2C 由芯片内置的专用硬件模块执行通信逻辑,需通过 “标志位” 反馈硬件状态;软 I2C 则由软件代码模拟 I2C 时序,状态判断直接通过 “引脚电平 + 延时” 实现,无需额外标志位。硬 I2C 出现了多个标志位(如I2C_FLAG_BUSY、I2C_FLAG_SB、I2C_FLAG_ADDR等),这些标志位本质是STM32 内置 I2C 硬件模块的 “状态反馈信号”。
2025-09-27 02:23:44
471
原创 4.5 I2C读数据
读数据也就是接收数据从机发送,主机(单片机)接收。通俗的说法就是读从机的数据由于I2C读数据和写数据,前面都要寻址,所以下面不再具体,具体可以参照4.4 I2C写数据。
2025-09-24 19:34:46
527
JDBC基础-Java学习笔记
2022-05-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅