- 按键引脚:
由原理图可知,按键使用的引脚为PC13
- 外部中断的设置
- SYSCFG的使能
- SYSCFG挂载在APB2总线上,但是在整体框图中并没有显示。但是在RCC的APB2总线外设使能中,有该外设的使能位:
并且在图表描述中有该外设:
在未使能SYSCFG时出现频繁的外部中断是由于未设置SYSCFG相关的外部中断源寄存器,并且默认的使用的外部中断源为PA13引脚。而PA13引脚作为调试引脚将出现频繁的电平跳变,进而导致频繁的外部中断
- EXTI的使能
- 虽然在APB2外设的图表描述中存在EXTI,但是在RCC对应的使能寄存器中,并没有使能EXTI对应的位
但是发现程序运行时可以向EXTI的寄存器中写值(可能EXTI是默认使能的?)
查阅相关资料:
- pend位的清除
- 对EXTI而言,需要手动清除pend位,而对于NVIC而言,当中断被相应后,就将清除该中断对应的位
- 这里的线,我们是PC13,参考手册
这也是之前TIM3的中断发生后在NVIC中不需要清除对应pend位的原因
设置外部中断的分组
Pin选择
编译器与浮点运算单元
Freertos中提供了若干CPU架构的移植文件(即port文件,其中包括pendsv的实现等)。由于该port文件中有若干与硬件浮点运算单元相关的指令,因此如果需要使用该port文件,需要启用硬件浮点单元,即需要在编译器的编译选项中增加:
该选项主要用于表示在编译时指定浮点运算的应用二进制接口
-mfloat-abi=hard
- 硬件浮点运算:使用硬件浮点运算单元(FPU)来执行浮点运算。
- 寄存器传递:浮点参数和返回值通过浮点寄存器传递,而不是通过通用寄存器或堆栈(在port文件中使用到了Sx寄存器,即浮点运算单元的寄存器)
- 性能:通常会带来更高的性能,因为硬件浮点运算比软件模拟要快得多。
- 依赖性:需要目标处理器支持硬件 FPU。如果处理器不支持硬件 FPU,程序可能无法正确运行。
-mfloat-abi=soft
- 软件浮点运算:使用软件库来模拟浮点运算,不依赖硬件 FPU。
- 通用寄存器传递:浮点参数和返回值通过通用寄存器或堆栈传递。
- 性能:性能较低,因为软件模拟浮点运算比硬件浮点运算慢。
- 兼容性:可以在不支持硬件 FPU 的处理器上运行
在我们uC的项目中选用的是软件模拟的浮点运算
一些知识点的回忆
上下拉的回忆
我们这里设置的是浮空,但是芯片外部有个上拉,所以pc13出现问题应该不是这里: