打印
[FAQ]

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

[复制链接]
943|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;
例程配置为从机模式,配置是对的。

也就是说从机模式和主机模式的话 引脚的配置是不同的是吗

使用特权

评论回复
5
qcliu| | 2023-6-6 15:36 | 只看该作者
这个主从模式和引脚本身的模式有什么关系呢

使用特权

评论回复
6
drer| | 2023-6-6 16:10 | 只看该作者
引脚本身的模式关系到它的输入输出的能力以及能达到的电压范围

使用特权

评论回复
7
coshi| | 2023-6-6 16:25 | 只看该作者
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢

使用特权

评论回复
8
kxsi| | 2023-6-6 16:50 | 只看该作者
coshi 发表于 2023-6-6 16:25
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢

这个好像没有相关文档 不过我们可以通过官网的例程来设定

使用特权

评论回复
9
wiba| | 2023-6-6 17:09 | 只看该作者
coshi 发表于 2023-6-6 16:25
我们在哪些文档中可以知道不同的功能需要配置成什么模式呢

其实我们完全可以把其他的配置好 然后挨个尝试哪种方式可以用就行

使用特权

评论回复
10
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);

使用特权

评论回复
11
walton1226| | 2023-6-8 08:40 | 只看该作者
SPI肯定分主机和从机模式,主机输出则从机对应输入,主机输入则从机对应输出。
配置引脚必须和自己的身份相匹配,如果是从机Slave,则配S,如果是主机Master,则配M.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝