- 打卡等级:以坛为家I
- 打卡总天数:213
- 最近打卡:2025-04-23 20:59:03
已绑定手机
荣誉版主
- 积分
- 1885
|
发表于 2025-2-22 00:38:30
|
显示全部楼层
没用过你这个芯片,但是专门帮你看了手册,功能是有的:
那使用P5.4口的时候,你得在下载选择里确认 “复位脚用作IO口”
下面的是验证过的:
void PWMA_config(void)
{
P_SW2 |= 0x80; //SFR enable
PWMA_PSCR = 0; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0]+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
PWMA_DTR = 0; // 死区时间配置, n=0~127: DTR= n T, 0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
// 0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T, 0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
PWMA_ARR = 0xffff; // 自动重装载寄存器, 控制PWM周期
PWMA_CNTR = 0; //清零编码器计数器值
PWMA_SR1 = 0;
PWMA_SR2 = 0;
PWMA_PS = 0;
PWMA_ENO = 0; //IO禁止输出PWM, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P
PWMA_CCMR1 = 0x01+(10<<4); // 通道1模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
PWMA_CCMR2 = 0x01+(10<<4); // 通道2模式配置, 配置成输入通道, 0~15对应输入滤波时钟数: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
PWMA_SMCR = 2; // 编码器模式, 模式1或模式2: 每个脉冲两个边沿加减2. 模式3: 每个脉冲四个边沿加减4.
PWMA_CCER1 = 0x55; // 配置通道输入使能和极性, 允许输入, 下降沿
PWMA_PS |= 0; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
PWMA_PS |= (0<<2); // 选择IO, 0:选择P1.2 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3,
PWMA_IER = 0x02; // 使能中断
PWMA_CR1 = 0x01; // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数, bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
}
//========================================================================
// 函数: void PWMA_ISR(void) interrupt PWMA_VECTOR
// 描述: PWMA中断处理程序.
// 参数: None
// 返回: none.
// 版本: V1.0, 2021-6-1
//========================================================================
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
if(PWMA_SR1 & 0x02) //编码器中断
{
PWMA_SR1 &= ~0x02;
pulse = PWMA_CNTR; //读取当前编码器计数值
B_Change = 1; //标志已有捕捉值
}
}
|
|