- 打卡等级:偶尔看看III
- 打卡总天数:38
- 最近打卡:2024-02-22 09:29:24
中级会员
- 积分
- 285
|
void PWMA_config(void)
{
u8 ccer1;
u8 ccer2;
u8 ps;
P_SW2 |= 0x80; //SFR enable
PWMA_ENO = 0; // IO输出禁止
PWMA_IER = 0; // 禁止中断
PWMA_SR1 = 0; // 清除状态
PWMA_SR2 = 0; // 清除状态
PWMA_CR1 = 0; // 清除控制寄存器
PWMA_CR2 = 0; // 清除控制寄存器
ccer1 = 0;
ccer2 = 0;
ps = 0;
eno = 0;
PWMA_ISR_En = 0;
PWMA_PSCR = 100; // 预分频寄存器, PWM时钟 = 12MHz/(11+1)=1MHz,
PWMA_DTR = 12;
PWMA_ARRH=((PWMA_DUTY-1) >> 8);
PWMA_ARRL=((PWMA_DUTY-1) & 0xFF);
PWMA_CCMR3 = 0x10; // 通道模式配置, PWM模式1, 预装载允许
PWMA_CCR3 = pwma2; // 比较值, 控制占空比(高电平时钟数)
ccer2 |= 0x05; // 开启比较输出, 高电平有效
ps |= 0x00; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
eno |= 0x30; // IO输出允许, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P
PWMA_ISR_En |= 0x08; // 使能中断
PWMA_CCMR2 = 0x68; // 通道模式配置, PWM模式1, 预装载允许
PWMA_CCR2 = pwma1; // 比较值, 控制占空比(高电平时钟数)
ccer1 |= 0x50; // 开启比较输出, 高电平有效
ps |= 0; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
eno |= 0x0C; // IO输出允许, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P
// PWMA_IER |= 0x01; // 使能中断
PWMA_CCER1 = ccer1; // 捕获/比较使能寄存器1
PWMA_CCER2 = ccer2; // 捕获/比较使能寄存器2
PWMA_PS = ps; // 选择IO
PWMA_BRK = 0x80; // 主输出使能 相当于总开关
PWMA_CR1 = 0x81; // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数, bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
PWMA_EGR = 0x01; //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
PWMA_ENO = 0x00; // 允许IO输出
}
void main(void)
{
PWMA_config();
ES = 1;
EA = 1; // 开启总中断
while (1){}
}
在这一段配置代码中只要我开启语句 PWMA_IER |= 0x08; 就会导致我的I/O口电平被拉低 ,我 注释掉语句 PWMA_IER |= 0x08; 或者将该语句放到 main 函数中,I/O口状态就不会被拉低,请问各位老师这是什么原因所导致的??
|
|