FreeRTOS 学习之二:二值信号量 前提:默认已经装好MDK V5 和STM32CubeMX,并安装了STM32F1xx系列的支持包
硬件平台:STM32F1xx系列
目的:学习使用二值信号量进行任务同步
二值信号量主要用于任务的同步
本文例子使用STM32CubeMX 配置创建两个任务,一个任务每秒钟发送一次信号量,另一个等待信号量并控制LED 的输出状态
打开STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103RBTx
配置时钟引脚
配置PA8 和PD2 为 Output,并把用户标签分别改为 LED0,LED1
将系统时基源改为TIM4
使能 FreeRTOS
8M 输入时,通过 PLL 得到 72M 内部时钟
配置 FreeRTOS
在Tasks and Queues 选项卡中,默认配置了一个名为defaultTask 的任务,其优先级为普通,任务堆栈大小为128 字,任务函数名为StartDefaultTask
双击蓝色的地方,弹出对话框,将任务名修改为Periodic,将任务函数名修改为PeriodicTask
点击Add 按钮,增加一个任务Handle,优先级设置为Normal,函数名为HandleTask
在Timers and Semaphores 选项卡,点击Binary Semaphores 项右边的“Add”按钮,添加一个信号量,名称改为bSem01
注:该步骤中,除了添加任务和信号量,其他的都使用默认参数
等完成后直接打开工程
工程基本组织结构如下图,其中Application/User 组中的文件是用户可以修改的,而其他组中的文件一般不进行修改