无人机串口初始化函数配置接收引脚模式疑问
- 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);