STM32CubeMX FreeRTOS二值信号量实验
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
系统: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 年前
更多推荐
已为社区贡献15条内容
所有评论(0)