想用同一个GPIO端口的不同引脚输出不同频率的脉冲,用两个函数配置输出,结果只有一个输出,还是默认的Pin_0脚,怎么回事?
具体的来说,我本打算用函数GPIO_Pulse_1()让PB0输出1KHz的脉冲,用GPIO_Pulse_2()让PB1、PB2输出5KHz的脉冲,结果只有GPIO_Pulse()让PB0输出1KHz的脉冲,PB1、PB2没输出脉冲。当不用两个函数输出,把PB0、PB1、PB2同时放在一个函数GPIO_Pulse_3(),则3路都有脉冲输出。为什么用两个函数就不能输出3路脉冲?觉得莫名其妙,不应该是这个样子呀,而且也不合理,请教!
下面是具体的代码,帮忙分析分析
int main(void)
{
Pulse_GPIO_Config();
Enc_PulseOut(1000);
GPIO_PulseOut(1000);
while(1);
}
/****************配置GPIO_PB0/1/2,输出脉冲******************/
void Pulse_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void GPIO_PulseOut(uint16_t n) //本来想模拟编码器正交脉冲信号
{
for(;n>0;n--)
{
GPIO_SetBits(GPIOB,GPIO_Pin_1);
delay(0x7FF);
GPIO_SetBits(GPIOB,GPIO_Pin_2);
delay(0x7FF);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
delay(0x7FF);
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
delay(0x7FF);
}
}
void Enc_PulseOut(uint16_t m)
{
for(;m>0;m--)
{
GPIO_SetBits(GPIOB,GPIO_Pin_0);
delay(0xFFF);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
delay(0xFFF);
}
}
void delay(uint32_t n)
{
for(;n>0;n--);
}
|