问题描述:
在使用正点原子战舰V3进行CAN实验时,CAN在回环模式下测验结果显示正常,但是在正常模式下进行两个开发板通信时,数据可以正常发送,却无法接受数据。
static void CAN_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIO clock */
RCC_APB2PeriphClockCmd(CAN_TX_GPIO_CLK|CAN_RX_GPIO_CLK, ENABLE);
/* Configure CAN TX pins */
GPIO_InitStructure.GPIO_Pin = CAN_TX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(CAN_TX_GPIO_PORT, &GPIO_InitStructure);
/* Configure CAN RX pins */
GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(CAN_RX_GPIO_PORT, &GPIO_InitStructure);
}
原因分析:
CAN在回环模式下可以得到正常数据说明CAN的初始化正常,那么问题就可能出现在后来加入的GPIO引脚的初始化,与提供例程对照后发现问题出在没有给GPIO_InitStructure.GPIO_Spee赋值
解决方案:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;实验总结
一开始以为GPIO_Speed只是配置输出的速度多少,正常不应该影响输出输入的配置,但是在看了GPIO的寄存器后发现 ,默认状态下是输入模式