RT-thread Studio 输出PWM(基于STM32F1系列)

本文详细介绍了如何在STM32单片机上使用RT-Thread和CubeMX配置PWM,包括设置定时器、时钟配置、HAL库启用及CubeMX中的参数调整,适合初学者和嵌入式开发者参考。

1.首先在RT-thread Settings中打开PWM

然后点这个保存全部。(这个时候编译整个文件会报很多错)

2.打开Divers文件夹下的board.h文件

 定义如上的两个。由于我开启的是定时器2的通道一(引脚是PA0),所以我定义了

#define BSP_USING_PWM2
#define BSP_USING_PWM2_CH1

3.打开位于dirvers文件夹下的stm32f1xx_hal_conf.h文件。

 如图,把红圈部分的注释去掉。

 可以看到,在宏定义了HAL_TIM_MODULE_ENABED后,包含了头文件tim.h。

4.打开stm32CubeMX软件,根据芯片新建工程。(我这里选择的是stm32f103c8t6)

 开启外部高速时钟。

 按自己需求配置TIMX。右侧将Clock Source设置为内部时钟,通道按自己需求,设置为PWM Generation CHX。

紧接着在下方

 pwm波的频率=系统时钟频率/(arr+1)/(psc+1),UP即为向上计数。其实这三个参数配置没有什么讲究,按图中即可。如果系统时钟频率为72MHZ的话,那么该PWM波的一个周期为0.5毫秒。

紧接着滑动到最下方

 模式为1即可,表示向上计数时,低于比较值的部分输出有效电平

Pulse先设置为0。它可以理解为有效电平的宽度。它的范围为0到周期。

第三行第四行按默认即可。

第五行就是用来设置有效电平的。LOW即低电平为有效电平

5.系统时钟配置

 这里并不一定要按图中配置。图中是利于外部时钟开启PLL时钟。

接下来

 第一行:自己起名。

第二行:自己选择生成的工程的位置

第三行(红线部分):选择工具。我用的是keil5,所以选择MDK-ARM V5。

接下来:

 红线部分打√后点右上角生成代码。

打开生成好的工程。

 先行编译一遍。然后

打开tim.c。

 将上述代码粘贴到rt-thread studio中的 board.c下。

 

 同样粘贴这一段代码到board.c下。粘贴完后将函数名中的Base改为PWM。

效果如下:

 。。。。。

 在rt-thread studio中的pwm.c文件中给出了pwm的初始化函数。但是我们已经用CubeMX初始化好pwm了,用它的函数还得再配置一遍,所以我们直接将CubeMX中的MX_TIM2_Init函数拷贝过来吧。之后可以进入这个函数来修改psc,arr,有效电平等的值。更正一下,这里的MX_TIM2_Init不需要拷贝过来。rt-thread做的优秀很多,如果我们想改周期也不需要操作底层修改arr,psc等值。)

函数位于tim.c中,将其复制到rt-thread studio的main.c中(位于int main函数之后)。

在int main前加上这三句。(一个月后更正:一二句多余,MX_TIM2_Init多余)

6.最后一步,来到int main中

先加入MX_TIM2_Init();

 “pwm2”因为我开启的是TIM2的1通道。划红线的1就是指通道1.画蓝线的499就是arr了。化黄线的0就是有效电平宽度了,修改这个值来输出不同占空比的pwm波。

(更正:画蓝线的是周期。周期是有一个公式的,它的值依赖psc,arr等的值。但这里呢,我们想让周期为多少就在蓝线部分填多少就可以了,rt-thread会自动将周期值配置成你想让的。周期以纳秒为单位,例如可以填为500000,就代表周期是500000纳秒,即0.5毫秒。当然也有可能你设置的周期过于大了,那么rt-thread会将周期配置成最大值。再说呢,其实pwm最重要的是占空比,周期设置多少无所谓,填500000就行)

按上图配置的话,PA0就会一直输出高电平。(因为低电平为有效电平,可有效电平的宽度为0,所以就会输出高电平了)。

至此就大功告成了!

### STM32 时钟配置方法 在 RT-Thread Studio 中正确配置 STM32 的时钟系统是确保项目正常运行的关键步骤之一。以下内容详细描述了如何在 RT-Thread Studio 中完成 STM32 的时钟配置。 #### 1. 使用 STM32CubeMX 配置时钟 可以利用 STM32CubeMX 工具生成初始的时钟配置代码,并将其集成到 RT-Thread 项目中。STM32CubeMX 提供了一个图形化的界面,用于配置系统时钟、外设时钟以及相关参数[^2]。通过该工具生成的初始化代码通常位于 `stm32xxxx_hal_msp.c` 和 `stm32xxxx_hal_conf.h` 文件中。 ```c // 示例:HAL 库中的时钟初始化函数 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // 配置时钟源 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 设置 PLL 倍频 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } // 初始化系统时钟 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } ``` #### 2. 替换 RT-Thread 默认时钟配置 RT-Thread 提供了一个默认的时钟配置函数,通常位于 `board.c` 文件中。为了使用 STM32CubeMX 生成的时钟配置,需要将默认的时钟配置函数替换为 CubeMX 生成的 `SystemClock_Config` 函数[^2]。 ```c // board.c 中的时钟配置函数替换 #include "stm32f1xx_hal.h" void SystemClock_Configuration(void) { SystemClock_Config(); // 调用 CubeMX 生成的时钟配置函数 } ``` #### 3. 修改 `stm32xxxx_hal_conf.h` 文件 确保在 `stm32xxxx_hal_conf.h` 文件中启用了必要的外设支持。例如,如果项目中使用了 USART 或 SPI 外设,则需要打开相应的宏定义[^2]。 ```c #define HAL_UART_MODULE_ENABLED // 启用 USART 外设支持 #define HAL_SPI_MODULE_ENABLED // 启用 SPI 外设支持 ``` #### 4. 确保启动文件与芯片型号匹配 在项目的链接脚本和启动文件中,必须确保所选的启动文件与目标芯片型号一致。例如,对于 STM32F103C8T6,应选择 `startup_stm32f103xb.s` 文件作为启动文件[^1]。 ```ld /* 示例:链接脚本中的内存区域配置 */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 20K } ``` #### 5. 测试时钟配置 编写一个简单的测试程序以验证时钟配置是否正确。例如,可以通过测量 GPIO 引脚上的 PWM 波形频率来确认系统时钟是否达到预期值。 ```c #include "rtthread.h" #include "board.h" int main(void) { HAL_Init(); // 初始化 HAL 库 SystemClock_Config(); // 配置系统时钟 // 测试时钟配置是否正确 rt_kprintf("System Clock Frequency: %d Hz\n", HAL_RCC_GetSysClockFreq()); while (1); } ``` ### 注意事项 - 在修改时钟配置时,务必确保所有外设的时钟分频器设置正确,以避免外设无法正常工作。 - 如果项目中使用了低功耗模式,需特别注意时钟配置对功耗的影响。 - 在调试阶段,建议使用逻辑分析仪或示波器检查实际时钟频率是否与配置值一致。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值