- 博客(10)
- 收藏
- 关注
原创 再谈输入捕获——测距超声波模块
注意点:就是我们的自动装载值,我们设定了65535,在主程序中,我们先设置成0(__HAL_TIM_SET_COUNTER(&htim2,0);上次文章中,定义了两个变量up_data和down_data,分别去读取通道1和通道2的计数值,得到的差进行数据处理,从而得到超声波的测距距离。我们利用Reset模式,在echo的上升沿复位计数值为0,这样我们就可以直接读取通道2的值,进行数据处理即可。
2025-06-18 10:11:44
189
原创 PWM呼吸灯
1、 开启对应 PWM 通道 :HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);PB0接LED发光二极管,PB0端口设置如上图所示。//用户改变PWM_Value,从而去控制LED。一、LED端口设置、TIM3 PWM设置。2、在中断回调函数中。
2025-06-11 14:42:46
88
原创 输入捕获——测距超声波模块
/获得下降沿捕获的值。//获得上升沿捕获的值。1、直接模式:Channel1(上升沿触发)2、间接模式:Channel1(下降沿触发)二、中断设置、读取数据及处理。2、捕获中断 读取数据及处理。
2025-06-11 10:25:03
254
原创 定时器三种从模式
门模式下,控制信号出现下降沿或上升沿,从模式控制器会暂停或继续定时器计数,在这两个边沿的时刻,也会将触发器中断标志位置1,但门模式并不复位计数器值,不再触发定时器更新中断。注:重装载值设置为50000-1 是为了便于观察现象,可自行改变数值观察现象。PA0可接传感器信号(可用小车红外寻迹模块)一、从模式控制器——复位模式。三、从模式控制器——触发模式。二、从模式控制器——门模式。
2025-06-10 20:48:31
115
原创 STM32每个定时器(TIM)回调函数的详细解析,包括触发条件和典型应用场景
触发条件:定时器计数达到自动重装载值(ARR)时触发(即溢出中断)。触发条件:定时器计数达到ARR值的一半时触发(需启用DMA或中断)。触发条件:定时器收到外部触发信号(如ETR引脚输入或内部触发)。触发条件:输入捕获DMA传输完成一半时触发(用于双缓冲模式)。回调函数类型 何时使用 示例场景。触发条件:PWM脉冲输出完成一个周期时触发。触发条件:PWM DMA传输完成一半时触发。触发条件:触发信号DMA传输完成一半时触发。
2025-06-04 10:07:44
335
原创 strlen()的用法及注意事项
二进制数据 使用固定长度(如 sizeof 或手动记录) sizeof(data) 或 HAL_UART_Transmit(…无符号字符数组 强制转换为 char*(需确保有 ‘\0’) strlen((char*)receive_data)// 二进制数据,无 ‘\0’问题:二进制数据中可能不含 ‘\0’,strlen() 会持续读取内存直到意外遇到 ‘\0’。char 可能是 有符号(-128~127)或 无符号(0~255),取决于编译器。
2025-05-30 08:40:09
415
原创 代码解析(1):pd3_state = (GPIOD->IDR & GPIO_PIN_3) ? 1 : 0;
0000 0000 0000 1000 → 结果非零(PD3=高电平)四、等效代码对比1、使用HAL库函数// 返回GPIO_PIN_SET或GPIO_PIN_RESET区别:HAL函数内部同样通过IDR寄存器实现,但增加了可移植性处理。2、直接判断状态// PD3高电平} else {// PD3低电平效果相同,但三元运算符更简洁。五、实际应用场景1、检测按键输入。
2025-05-16 11:01:10
466
原创 一、STM32启动代码中三个关键初始化函数详解——HAL_Init()、delay_init(72)与SystemClock_Config()的作用与协作
2、时钟树分配 设置AHB(72MHz)、APB1(36MHz)、APB2(72MHz)分频,满足不同外设时钟需求。3、SysTick定时器启动 初始化系统滴答定时器,为HAL库的HAL_Delay()提供基准时钟源。2、参数72的意义 传入系统时钟频率(MHz),计算定时器计数周期(如72MHz时1us=72个时钟周期)。3、提供用户级延时 支持delay_us()和delay_ms(),避免直接使用HAL_Delay()的阻塞问题。HAL_Init();
2025-05-16 09:25:48
359
原创 uCOS-III启动与初始化
使用UCOSIII的步骤: 第一步:使用OSInit()初始化UCOSIII; 第二步:创建一个Start_task()任务; 第三步:调用oSStart()函数开启UCOSIII。 注意:我们在调用OSStart()开启UCOSIII之前一定要至少创建一个任务,其实我们在调用OSInit()函数初始化UCOSI的时候已经创建了一个空闲任务。
2024-02-20 11:30:20
493
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人