使用STMS8003实现上升沿触发PWM
时间: 2023-07-20 08:04:15 浏览: 171
STMS8003是一款超低功耗的ARM Cortex-M0+微控制器,它可以用来实现上升沿触发PWM。下面是一个简单的代码示例:
```c
#include "stm32s800xx.h"
void PWM_Init(void)
{
// 1. 使能GPIO时钟
RCC->IOPENR |= RCC_IOPENR_GPIOBEN;
// 2. 配置PB0为复用输出模式
GPIOB->MODER &= ~GPIO_MODER_MODE0_Msk;
GPIOB->MODER |= GPIO_MODER_MODE0_1;
// 3. 配置PB0的输出类型为推挽输出
GPIOB->OTYPER &= ~GPIO_OTYPER_OT0_Msk;
// 4. 配置PB0的输出速率为高速
GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEED0_Msk;
// 5. 配置PB0的上拉电阻
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPD0_Msk;
GPIOB->PUPDR |= GPIO_PUPDR_PUPD0_0;
// 6. 配置TIM2时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
// 7. 配置TIM2的预分频器
TIM2->PSC = 0;
// 8. 配置TIM2的自动重载值
TIM2->ARR = 999;
// 9. 配置TIM2的PWM模式为通道1
TIM2->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2;
// 10. 配置TIM2的PWM输出极性为正极性
TIM2->CCER &= ~TIM_CCER_CC1P_Msk;
// 11. 配置TIM2的PWM输出比较值
TIM2->CCR1 = 500;
// 12. 配置TIM2的触发源为上升沿
TIM2->SMCR |= TIM_SMCR_TS_0 | TIM_SMCR_SMS_2;
// 13. 使能TIM2
TIM2->CR1 |= TIM_CR1_CEN;
}
int main(void)
{
// 初始化PWM
PWM_Init();
while (1)
{
// 空循环
}
}
```
上面的代码实现了在PB0引脚输出PWM波,当TIM2的触发输入引脚(TRGI)检测到上升沿时,就会触发一次PWM输出。其中,TIM2的计数器值从0开始计数,当计数器值达到比较寄存器(CCR1)的值时,就会产生PWM输出。在上升沿触发模式下,TIM2的计数器值会被清零,因此每次触发时PWM波都会从低电平开始输出。需要注意的是,TIM2的触发输入引脚(TRGI)需要外部信号触发才能正常工作。
阅读全文