系统:linux mint xfce 64bit
软件:
1、SW4STM32
2、STM32CubeMX
3、开发板:STM32F407VET6核心
二值信号量作用:
(1)任务间同步
(2)中断与任务间同步
本次实验二值信号量的作用是中断与任务间同步,使用STM32CubeMX配置的freertos其API进行了封装,是CMSIS格式的API,关于二值信号量的操作函数如下图所示
实验效果:串口发送5个字节长度的字符串后,触发接收中断,同时发生二值信号量osSemaphoreRelease(myBinarySem01Handle) ,然后在任务函数1里面打印出相关信息已经字符串。
(1)配置RCC(外部晶振8M),SYS(systick设置为TIM4),LED灯所在引脚,串口1(用来打印输出信息),选择FreeRTOS
(2)配置时钟,选择外部晶振,HCLK输入168会自动寻找配置
(3)使能USART1中断,在设置了freertos之后串口1默认的中断优先级默认为5,使用默认即可
(4)在freertos里添加信号量semaphore
(5)生成sw4stm32工程,记得在代码生成设置里面勾选为每个外设生成独立的.c/.h 文件
(6)修改main.c文件内容,首先添加串口重定向,定义变量等
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
int8_t res[5]; // 接收缓存
extern osSemaphoreId myBinarySem01Handle;
/* USER CODE END PV */
/* USER CODE BEGIN 0 */
int __io_putchar(int ch)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
int _write(int file, char *ptr, int len)
{
int DataIdx;
for (DataIdx = 0; DataIdx < len; DataIdx++)
{
__io_putchar(*ptr++);
}
return len;
}
/* USER CODE END 0 */
(7)启动串口接收中断
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1,res,5);// 启动串口接收中断
/* USER CODE END 2 */
(8)编写中断处理函数
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
printf("SEND SUCCESS\n");
HAL_UART_Receive_IT(&huart1,res,5); // 重新启动串口1接收中断
osSemaphoreRelease(myBinarySem01Handle);// 释放信号量
}
/* USER CODE END 4 */
(9)修改freertos.c 内容
/* USER CODE BEGIN Variables */
extern uint8_t res[5];
/* USER CODE END Variables */
/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
if(osOK == osSemaphoreWait(myBinarySem01Handle,10))// 如果接收到信号量
{
printf("Semaphore Print\n");
printf("%s\r\n",res);
// osDelay(100);
}
}
/* USER CODE END StartDefaultTask */
}
(10)烧写程序验证
上一篇:STM32控制16路舵机控制板PCA9685
下一篇:STM32CubeMX FreeRTOS软件定时器实验
推荐阅读最新更新时间:2024-03-16 16:06
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 《美光2022台北国际电脑展主题演讲精选:数据中心专辑》,关注、评论赢固态硬盘等好礼!
- 有奖直播:TI 低功耗 MCU 产品和 Zigbee 无线解决方案
- 关注、评论赢好礼!《美光2022台北国际电脑展主题演讲精选:智能边缘与智能制造专辑》
- 跟帖晒单有礼《MCU工程师炼成记》
- 【EEWORLD第三十二届】2011年11月社区明星人物揭晓!
- 看视频答题,玩转幸运大抽奖:Littelfuse汽车电子电路保护知多少
- PI带您走进物联网时代!下载资料赢好礼
- ADI有奖下载活动之18 ADI双光束分光光度计演示系统和解决方案
- 有奖报名 | 安富利邀您参与2022国际工业博览会!(11月30日-12月4日,上海)