关与 STM8S103F3 定时器1产生PWM信号的问题
本帖最后由 baiyni888 于 2018-10-16 19:40 编辑我在使用STM8S103F3 单片机定时器2产生PWM信号时,是没有问题的,CH1CH2CH3 都是能正常输出PWM信号的;
但是在使用 定时器1 产生PWM信号时,一直就没有信号输出来,因为我想用到 反向的信号,所以想用 定时器1产生PWM,可以有互补信号出来
#include <iostm8s103f3.h>
////////////这是定时器1产生PWM信号的初始化
voidtimer1_PWM(void)
{
CLK_PCKENR2 = 0x80;//开启定时器1外设时钟
// TIM1_EGR |= 0x01; //重新初始化TIM1
// TIM1_RCR = 0x00;
TIM1_PSCRH =0; //设定预分频为,16分频 8M
TIM1_PSCRL =0x01;//PWM的时钟 影响周期
TIM1_CCER1 = 0x55; //CC2ER1开启1,2,高电平有效
TIM1_CCMR1 = 0x60; //PWM模式1,CC1配置入输出
TIM1_ARRH = 0x00; //设定重装载值
TIM1_ARRL = 0xff;//PWM的周期
TIM1_CCR1H = 0x00;
TIM1_CCR1L = 0x14;// 占空比值
//TIM1_IER = 0x01; //允许更新中断
TIM1_CR1 = 0x01; //使能TIM1计数器
TIM1_BKR = 0x80;
}
////GPIO端口初始化
void GPIO_init()
{
PC_DDR=0xff;//方向输出
PC_CR1=0xff;//推挽方式
PC_CR2=0;
PC_ODR=0;//输出低电平
}
void main()
{
timer1_PWM();
GPIO_init();
while(1)
{
;
}
}
目前在单片机的 13 14 1617 输出脚上没有信号
用的是IAR环境,头文件
#include <iostm8s103f3.h>
#define uint unsigned int
#define uchar unsigned char 本帖最后由 baiyni888 于 2018-10-16 19:38 编辑
定时器2产生PWM是正常的,代码如下:
#include <iostm8s103f3.h>
voidtimer2_PWM(void)
{
TIM2_CCMR1 = 0x70;
TIM2_CCMR2 = 0x70;
TIM2_CCER1 =0x33;
TIM2_CCMR3 = 0x70; //pwm模式2
TIM2_CCER2 = 0x03; //CC3引脚使能
//设定频率-----------------------------
//2^1=2分频
TIM2_PSCR = 0x01;
//初始化自动装载寄存器
TIM2_ARRH = 0x00;
TIM2_ARRL = 0xFF;
//初始化比较寄存器,决定PWM 方波的占空比
TIM2_CCR1H = 0;
TIM2_CCR1L = 50;
TIM2_CCR2H = 0;
TIM2_CCR2L = 150;
TIM2_CCR3L = 100;
TIM2_CCR3H = 0; //默认输出低
TIM2_CR1 = 0x01;// 启动计数
}
void main()
{
PD_DDR =0xff;//方向为输出
PD_CR1 =0xff; //推挽方式 PA_DDR =0x0f;
PA_CR1 =0x0f;
timer2_PWM();
while(1);
}
可以在STM8S103F3单片机的1 10 20 三个脚同时输出三个PWM信号,占空比50微秒,100微秒,150微秒高电平方波信号
PC6、PC7需要重映像TIM1-CH1、CH2
果然是这个选择复用功能的原因,我说查了近10次代码原因,都是正常的,因为我是用的IAR,直接用的仿真的,没有用STVP下载,IAR仿真时也不知道怎么搞引脚复选功能,总的来说,非常感谢回复!:) 管脚复用一不小心就入坑
页:
[1]