RTOS编程

这篇博客介绍了如何在STM32CUBEMX上基于PWM实现呼吸灯效果,以及如何将uCOSIII操作系统移植到STM32F103C8芯片上。详细步骤包括配置外部时钟、设置定时器和PWM通道,以及移植过程中涉及到的DWT、DEM_CR等寄存器的配置。同时,提供了系统时钟配置和GPIO初始化的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、STM32CUBEMX_基于PWM的呼吸灯

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、配置定时器2。如图,位置1选中定时器2;位置2选择时钟源为“Internal Clock”,通道2选择“PWM Generation CH2”
在这里插入图片描述
!](https://img-blog.csdnimg.cn/5cbcff3dd143448186f96ccf34837285.jpeg)
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
1.初值设为10.
uint16_t duty_num = 10;

2,开始TIM2的通道2,输出PWM。
代码:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

3,每隔50毫秒,占空比加10,如果超过500(也就是PWM周期),自动变成0.
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
	HAL_Delay(50);
	duty_num = duty_num + 10;
	if(duty_num > 500)
	{
		duty_num = 0;
	}
	__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);

}
在这里插入图片描述
在这里插入图片描述

video_20221112_204531

二、STM32F103C8移植uCOSIII

在这里插入图片描述
在这里插入图片描述

`bsp.c
#include “includes.h”

#define DWT_CR *(CPU_REG32 *)0xE0001000
#define DWT_CYCCNT *(CPU_REG32 *)0xE0001004
#define DEM_CR *(CPU_REG32 *)0xE000EDFC
#define DBGMCU_CR *(CPU_REG32 *)0xE0042004

#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)

CPU_INT32U BSP_CPU_ClkFreq (void)
{
return HAL_RCC_GetHCLKFreq();
}

void BSP_Tick_Init(void)
{
CPU_INT32U cpu_clk_freq;
CPU_INT32U cnts;
cpu_clk_freq = BSP_CPU_ClkFreq();

#if(OS_VERSION>=3000u)
	cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;
#else
	cnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;
#endif
OS_CPU_SysTi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值