求NUCLEO-F411RE板SPI4的通讯程序
SPI2和SPI3的程序已调通,SPI4却怎么也调不通了,不知道为什么???问题解决了!
端口复用重映射选择要正确,特别是比较新的片子,标准库的注释会不能及时更新,所以需要看源代码的宏定义,
比如:使用STM32F411RE,必须查看stm32f4xx_gpio.h,发现
#define GPIO_AF6_SPI4((uint8_t)0x06)/* SPI4 Alternate Function mapping (Only for STM32F411xE Devices) */
故程序中就要如下配置SPI4:
if (bus_type==SPI4) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF6_SPI4);
}//SPI4_SCK PB13
if (bus_type==SPI4) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF6_SPI4);
}//SPI4_MISO PA11
if (bus_type==SPI4) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_SPI4);
}//SPI4_MOSI PA1
???当然还有问题,从以上我们看出,配置SCK和MISO时选择GPIO_AF6_SPI4,然而配置MOSI时却需要选择GPIO_AF_SPI4,不知道为什么,可能是ST标准库的bug吧。 你是用STM32CubeMX生成的初始化代码还是自己生成的。 请注意SPI2/3 与SPI1/4/5位于不同的时钟总线。前者挂在APB1,后者挂在APB2.
建议下载个STM32CUBEMX配置下。一目了然。 zoomdy 发表于 2017-1-24 20:55
你是用STM32CubeMX生成的初始化代码还是自己生成的。
朋友好!我是用原来的标准库自己生成的 xmshao 发表于 2017-1-25 11:18
请注意SPI2/3 与SPI1/4/5位于不同的时钟总线。前者挂在APB1,后者挂在APB2.
建议下载个STM32CUBEMX配置下 ...
是的,这个我注意到了,而且我用的是原来的标准库。在SPI2/3的基础上,我只是把时钟总线改到APB2,其他应该不用改吧 这个和时钟总线无关,这个和使用习惯有关,这个是STM的程序猿的使用习惯
页:
[1]