无人机串口初始化函数配置接收引脚模式疑问

followme001
3
来自:无人机
2018-10-03

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;     //PA10为CPU的接收引脚,程序把接收脚和发送脚都配置为复用推挽输出。

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

    GPIO_Init(GPIOA,&GPIO_InitStructure); 


以上官方程序把接收脚和发送脚都配置为复用推挽输出,结果是程序连中断服务程序都进不了。


改为以下这样,发送脚为复用输出,接收脚为输入,程序才正常。因为按正常逻辑,接收对单片机来说,为输入方向,理应配置为输入才能正常工作而不是输出。

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

    GPIO_Init(GPIOA,&GPIO_InitStructure);     

    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   //PA10配置为输入,才能进入串口中断服务程序。

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;    

    GPIO_Init(GPIOA,&GPIO_InitStructure);    


1 条回答