系统: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)烧写程序验证
这里写图片描述

相关视频教程请参考:https://www.bilibili.com/video/av63561004

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐