
问题一当调用Freertos时要给单片机初始化的堆和栈内存起始分配小一些该报错是 STM32F103C8T6 仅 20KB 片内 RAM 资源不足因启动文件系统栈堆配置偏大、FreeRTOS 多静态任务栈与全局缓冲区叠加占用超内存上限导致链接器 L6406E 空间不足通过缩减启动栈堆、裁剪 FreeRTOS 内存、精简全局静态内存即可解决电源芯片电机控制任务左上TIM1 CH1 左下TIM1 CH4 右上TIM4 CH1 右下TIM4 CH2LED控制任务1.BSRR(Bit Set/Reset Register) - 端口位设置/清除寄存器通俗理解这是专门用来输出高电平3.3V的开关。它的脾气它只对你写入1的位感兴趣。如果你往它的某一位写1对应的引脚就会立刻输出高电平如果你往它写0它会直接忽略什么都不做。代码解析GPIOB-BSRR GPIO_PIN_8;这句话的意思是强行把 PB8 引脚拉高到 3.3V。结合我们之前说的“水往低处流”原理两边都是 3.3V水流不动所以灯就灭了。2.BRR(Bit Reset Register) - 端口位清除寄存器通俗理解这是专门用来输出低电平0V/GND的开关。它的脾气和BSRR类似它也只对写入1感兴趣。不同的是你往BRR某一位写1对应的引脚会被瞬间“清零”也就是拉低到 0V。写0依然是无视。代码解析GPIOB-BRR GPIO_PIN_8;这句话的意思是强行把 PB8 引脚拉低到 0V。此时 3.3V 的电流哗啦啦流进 PB8灯就亮了。3.IDR(Input Data Register) - 端口输入数据寄存器通俗理解这是单片机的“电压探测器”。它的脾气它是一个只读的寄存器里面实时保存着当前每一个引脚上的真实电压状态。如果是 3.3V这一位就是1如果是 0V这一位就是0。代码解析GPIOB-IDR GPIO_PIN_8由于GPIO_PIN_8的本质是第 8 位为 1 的数字0x0100这句按位与操作就是精准地把 PB8 当前的状态给“抠”出来看看是 1 还是 0。