- 博客(30)
- 收藏
- 关注
原创 定时器外部时钟
外部时钟模式1和外部时钟模式2的区别在于,外部时钟模式1使用外部输入脚(TIx)作为计数器时钟的时钟源,而外部时钟模式2使用外部触发输入(ETR)或内部触发输入(ITRx)作为计数器时钟的时钟源1。代码中选择的是外部时钟模式2(TIM_ETRClockMode2Config函数)。TIM_GetCounter(TIMx)函数获取TIMx定时器的CNT值。PA0引脚是TIM2的ETR引脚,就在这个PA0引脚输入一个外部时钟。
2026-04-24 20:52:46
37
原创 输入捕获IC
(在对射式红外传感器实验中,用PWM信号作为信号源,比如对射式红外传感器计次,每来一个上升沿计次加1。再使用一个定时器,定一个1s的定时中断,在中断里,每隔1s取一下计次值,同时清零计次,为下一次做准备)ARR自动重装值,要设置大一些,防止计数溢出(ARR设置大,是避免下一个上升沿未到,计数器就溢出了)(TIM2定时器里设置了时基单元为1Hz,也就是1s产生一次中断,执行TIM2_IRQHandler中断函数,在1s内统计的编码器中的N的次数(分别采用外部中断,定时器中断 使用测频法。
2026-04-24 14:05:28
23
原创 定时器(TIM)定时中断 和 定时器外部时钟
TIM_InternalClockConfig函数给外设配置时钟,由于是时钟已经是默认初始化好的,所以可要可不要。时钟源选择:下面标记的6个函数。
2026-03-31 17:22:26
28
原创 对射式红外传感器计次 & 旋转编码器计次
第四步:配置EXTI,选择边沿触发方式,比如上升沿,下降沿或双边沿还有触发响应方式,可以 选择中断响应和事件响应。检测到B相位的下降沿 和 A相位是低电平时 : 正转 旋转编码器。检测到A相位的下降沿 和 B相位是低电平时 : 反转 旋转编码器。GPIO引脚配置上拉输入(IPU)模式,EXTI配置使用的是下降沿触发,第三步:配置AFIO,选择使用的这一路AFIO,连接到后面的EXTI。第一步:配置RCC,把上图涉及到的所有外设的时钟都开起来。
2026-03-30 17:16:46
60
原创 不重复的三元组(力扣第15题,三数之和)
不重复的三元组(力扣第15题,三数之和):给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!当nums = {-1,0,0,1}时,i指向-1,left指向第一个0,right指向1,进入if(num == 0)中,nums[left] == nums[left + 1]成立,left++,left等于2,然后再进行判断nums[left] == nums[left + 1]不成立结束循环,这个例子没什么问题;
2025-12-08 14:47:39
243
原创 力扣第7题 整数反转
在 C++ 中,intINT_MAXINT_MIN如果反转后的数字超过了这个范围,题目要求返回 0。代码中的逻辑 sum = sum * 10 + mod;是将当前的 sum 扩大 10 倍并加上新的个位数。一旦这一步计算结果超出了 int 范围,程序就会发生溢出错误(或未定义行为)。因此,我们需要在执行乘法和加法之前,就提前判断这一步操作是否会越界。
2025-11-29 12:13:25
372
原创 力扣编号1262——找出并返回能被三整除的元素 最大和
本来我一开始写的是int a[nums.size() + 1] = {0};但造成编译错误,原因:这行代码在标准 C++ 中是非法的,因为它试图创建一个大小可变的数组并对其进行初始化。普通数组(也叫静态数组)的大小必须是一个编译期常量表达式。也就是说,数组的大小在程序运行之前就必须是已知的、固定的。下面代码中使用的是vector容器,vector 是 C++ 中用于动态大小数组的标准容器。它正是为了解决这类问题而设计的。因为我写的上面的数组直接定义的是a[40000]。可能会造成大量空间没有利用。
2025-11-24 10:38:51
149
原创 力扣第三题(求不含有重复字符的 最长 子串 的长度。)双指针滑动窗口
与上面不同的是,第二个代码使用 unordered_set ,是因为它的插入、删除和查找操作的平均时间复杂度是 O (1),比 set 的 O (log n) 更快,更适合这个场景。
2025-11-23 18:01:48
87
原创 set容器(set和map容器只能用insert插入元素)
交换:insert返回的类型是pair对组,第二个second元素是表示插入元素是否成功
2025-11-22 09:50:32
193
原创 STL中算法调用时的参数类别+重载注意事项
2、而使用一些算法时,算法的参数列表中需要用到仿函数(也就是函数对象,匿名函数对象),需要写仿函数(也就是一个类,在类中重载operator(),返回值为bool类型的话即参数类型中有谓词)。参数什么时候带括号,什么时候不带,是根据函数的参数列表来的,如果使用的是仿函数,就要写括号写成匿名函数对象。如果使用的是普通函数的话,写函数名即可。3、所以说使用哪种算法时,要看参数类型是什么,比如像count算法,使用自定义数据类型的时候,需要重载operator==。例如:STL中的find算法。
2025-11-20 10:46:13
131
原创 力扣第二题(两数相加)
其实我感觉可能题目要求不太明确(既然给出来的测试用例中l1 = [0] , l2 = [0],那可能以为是一个结点且val = 0的链表),也有可能是我代码中哪个地方出错了。题目中并没有限制输入链表的长度。如果输入的链表非常长,比如有 20 个节点,那么它所代表的数字会超过。这其实就是暴力法,根据每一个链表的值不断累加到真实的值;类型的最大值(大约是 9e18)。的计算就会出错,导致最终结果完全错误。
2025-11-19 15:36:44
229
原创 注意事项,函数的声明前后顺序(set排序设置案例)
只能告诉编译器 “存在这样一个类”,但无法提供该类的具体实现(尤其是。(确保比较操作的 “只读性”)。容器在内部使用比较器时,会通过。引用调用,因此必须将比较器的。具体来说,编译器在解析。模板需要根据比较器的。
2025-11-18 11:07:50
323
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅