本人使用STM8S207RB(LQFP-64)为主芯片的开发板,使用TIM1的OC1和OC1N输出一对互补的PWM信号,但是使用逻辑分析仪查看输出的信号,OC1引脚输出信号正常,但是OC1N引脚输出始终为低电平。
OC1引脚为PC1,OC1N引脚为PB0/AIN0,所使用引脚均为直接引出。
程序的代码如下:
#include "stm8s207r.h"
#include <interrupt.h> // 声明中断服务函数
/* 函数声明----------------------------------------------------------------------*/
/* TIM1_PWM初始化 */
void TIM1_PWM_init(void);
void main(void)
{
TIM1_PWM_init();
while(1);
}
/* 函数定义----------------------------------------------------------------------*/
/****
* 函数功能: TIM1_PWM初始化
* 参数: 无
* 返回值: 无
*/
void TIM1_PWM_init(void)
{
TIM1_ARRH = (6000 >> 8); // 计数周期
TIM1_ARRL = (6000 << 8) >> 8;
TIM1_CCR1H = (3000 >> 8); // TIM1比较/捕获寄存器1
TIM1_CCR1L = (3000 << 8) >> 8;
TIM1_PSCRH = 0; // 分频比
TIM1_PSCRL = 2;
TIM1_CR1 |= 0x20; // CMS(01) : Center-aligned mode 1
TIM1_CR1 |= 0x80; // set ARPE
TIM1_CCMR1 |= 0x60; // OC1M(110) : PWM Mode 1
TIM1_CCMR1 |= 0x08; // set OC1PE
TIM1_CCER1 |= 0x01; // set CC1E
TIM1_CCER1 |= 0x08; // set CC1NP
TIM1_CCER1 |= 0x04; // set CC1NE
TIM1_CR2 |= 0x01; // set CCPC
TIM1_EGR |= 0x20; // set COMG
TIM1_DTR = 0x27; // Deadtime generator
TIM1_BKR |= 0x08; // set OSSR
TIM1_BKR |= 0x80; // set MOE
TIM1_CR1 |= 0x01; // 开启计数器
}
此帖出自
小平头技术问答
一周热门 更多>