[FAQ] APM32F103 官方例程SPI的GPIO配置是错的

[复制链接]
1595|10
 楼主| akqbdlk 发表于 2023-5-21 12:43 | 显示全部楼层 |阅读模式
这是官方SPI例程中的代码,输入配置成GPIO_MODE_AF_PP,输出配置成GPIO_MODE_IN_PU,官方是在故意考验用户的解BUG能力吗
void SPI_FullDuplex_Init()
{
    GPIO_Config_T gpioConfig;
    SPI_Config_T spiConfig;

    /* Enable related Clock */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SPI1);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);

    /* config PIN_6  MISO */
    gpioConfig.pin =  GPIO_PIN_6 ;
    gpioConfig.mode = GPIO_MODE_AF_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &gpioConfig);

    /* config PIN_5->SCK , PIN_7->MOSI */
    gpioConfig.pin = GPIO_PIN_5 | GPIO_PIN_7;
    gpioConfig.mode = GPIO_MODE_IN_PU;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &gpioConfig);

    SPI_ConfigStructInit(&spiConfig);

    spiConfig.length = SPI_DATA_LENGTH_8B;

    spiConfig.baudrateDiv = SPI_BAUDRATE_DIV_32;
    /* 2 line full duplex */
    spiConfig.direction = SPI_DIRECTION_2LINES_FULLDUPLEX;
    /* LSB first */
    spiConfig.firstBit = SPI_FIRSTBIT_LSB;
    /* Slave mode */
    spiConfig.mode = SPI_MODE_SLAVE;
    /* Polarity is low */
    spiConfig.polarity = SPI_CLKPOL_LOW;
    /*  Software select slave enable  */
    spiConfig.nss = SPI_NSS_SOFT;
    /* Phase is 1 edge */
    spiConfig.phase = SPI_CLKPHA_1EDGE;
    /* SPI config */
    SPI_Config(SPI1, &spiConfig);

    SPI_ConfigDataSize(SPI1, SPI_DATA_LENGTH_8B);

    SPI_Enable(SPI1);
}
walton1226 发表于 2023-5-29 08:55 | 显示全部楼层
spiConfig.mode = SPI_MODE_SLAVE;
例程配置为从机模式,配置是对的。
MAA256 发表于 2023-5-30 16:05 | 显示全部楼层
楼上正解
tpgf 发表于 2023-6-6 15:22 | 显示全部楼层
walton1226 发表于 2023-5-29 08:55
spiConfig.mode = SPI_MODE_SLAVE;
例程配置为从机模式,配置是对的。

也就是说从机模式和主机模式的话 引脚的配置是不同的是吗
qcliu 发表于 2023-6-6 15:36 | 显示全部楼层
这个主从模式和引脚本身的模式有什么关系呢
drer 发表于 2023-6-6 16:10 | 显示全部楼层
引脚本身的模式关系到它的输入输出的能力以及能达到的电压范围
coshi 发表于 2023-6-6 16:25 | 显示全部楼层
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢
kxsi 发表于 2023-6-6 16:50 | 显示全部楼层
coshi 发表于 2023-6-6 16:25
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢

这个好像没有相关文档 不过我们可以通过官网的例程来设定
wiba 发表于 2023-6-6 17:09 | 显示全部楼层
coshi 发表于 2023-6-6 16:25
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢

其实我们完全可以把其他的配置好 然后挨个尝试哪种方式可以用就行
walton1226 发表于 2023-6-8 08:36 | 显示全部楼层
tpgf 发表于 2023-6-6 15:22
也就是说从机模式和主机模式的话 引脚的配置是不同的是吗

/* config PIN_6  MISO */ MISO=Master In Slave Out
    gpioConfig.pin =  GPIO_PIN_6 ;
    gpioConfig.mode = GPIO_MODE_AF_PP;//Slave Out=AF_PP
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &gpioConfig);

    /* config PIN_5->SCK , PIN_7->MOSI */MOSI=Master Out Slave In
    gpioConfig.pin = GPIO_PIN_5 | GPIO_PIN_7;
    gpioConfig.mode = GPIO_MODE_IN_PU;//Slave In=IN
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &gpioConfig);

    SPI_ConfigStructInit(&spiConfig);
walton1226 发表于 2023-6-8 08:40 | 显示全部楼层
SPI肯定分主机和从机模式,主机输出则从机对应输入,主机输入则从机对应输出。
配置引脚必须和自己的身份相匹配,如果是从机Slave,则配S,如果是主机Master,则配M.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部