void IO_Toggle(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
{
GPIO_WriteBit(GPIOx, GPIO_Pin, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin))));
}
int main(void)
{GPIO_WriteBit(GPIOD,GPIO_Pin_0,Bit_RESET);
GPIO_WriteBit(GPIOD,GPIO_Pin_1,Bit_SET);
GPIO_WriteBit(GPIOD,GPIO_Pin_2,Bit_SET);
GPIO_WriteBit(GPIOD,GPIO_Pin_3,Bit_SET);
while(1)
{
if(flag==1)
{
Toggle_Num++;
switch(Toggle_Num)
{
case 1: case 3: case 5: case 7: case 9: case 11: case 13: case 15:
break;
case 2:
case 6:
case 10:
case 14:
IO_Toggle(GPIOD,GPIO_Pin_0|GPIO_Pin_1);
break;
case 4:
case 12:
IO_Toggle(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
break;
case 8:
case 16:
IO_Toggle(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
Toggle_Num =0;
break;
}
flag=0;
}
}
IO初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOD, &GPIO_InitStructure);
我这样设定不应该是PD0和PD1为互补方波且频率相同,PD2和PD3分别为PD1频率的1/2和1/4吗?然而我用示波器测试,情况并不是这样,PD0和PD1完全一样,PD2和PD3变成了一条电平,哪位大佬能看看是我哪里设置的有问题吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是我的取反函数不对,只能操作单个IO口,直接用寄存器取反就行了
一周热门 更多>