kingming 发表于 2017-1-24 16:22:13

求NUCLEO-F411RE板SPI4的通讯程序

SPI2和SPI3的程序已调通,SPI4却怎么也调不通了,不知道为什么???

kingming 发表于 2017-2-7 16:34:06

问题解决了!
端口复用重映射选择要正确,特别是比较新的片子,标准库的注释会不能及时更新,所以需要看源代码的宏定义,
比如:使用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吧。

zoomdy 发表于 2017-1-24 20:55:34

你是用STM32CubeMX生成的初始化代码还是自己生成的。

xmshao 发表于 2017-1-25 11:18:32

请注意SPI2/3 与SPI1/4/5位于不同的时钟总线。前者挂在APB1,后者挂在APB2.

建议下载个STM32CUBEMX配置下。一目了然。

kingming 发表于 2017-2-5 13:33:34

zoomdy 发表于 2017-1-24 20:55
你是用STM32CubeMX生成的初始化代码还是自己生成的。

朋友好!我是用原来的标准库自己生成的

kingming 发表于 2017-2-5 13:37:04

xmshao 发表于 2017-1-25 11:18
请注意SPI2/3 与SPI1/4/5位于不同的时钟总线。前者挂在APB1,后者挂在APB2.

建议下载个STM32CUBEMX配置下 ...

是的,这个我注意到了,而且我用的是原来的标准库。在SPI2/3的基础上,我只是把时钟总线改到APB2,其他应该不用改吧

五哥1 发表于 2018-5-25 23:55:50

这个和时钟总线无关,这个和使用习惯有关,这个是STM的程序猿的使用习惯
页: [1]
查看完整版本: 求NUCLEO-F411RE板SPI4的通讯程序