打印
[STM32F1]

STM32F103和STM32F030 SPI-miso配置不同点

[复制链接]
326|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
舒伯特玫瑰|  楼主 | 2022-12-31 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在调试STM32F103和STM32F030的SPI时,发现两者的MISO配置不同,

STM32F103:

     /**SPI1 GPIO Configuration   
    PA5     ------> SPI1_SCK
    PA6     ------> SPI1_MISO
    PA7     ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_6;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);



使用特权

评论回复
评论
舒伯特玫瑰 2022-12-31 15:57 回复TA
———————————————— 版权声明:本文为CSDN博主「yule」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yule/article/details/102755151 
沙发
舒伯特玫瑰|  楼主 | 2022-12-31 15:58 | 只看该作者
STM32F030:

    /**SPI1 GPIO Configuration   
    PA5     ------> SPI1_SCK
    PA6     ------> SPI1_MISO
    PA7     ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

使用特权

评论回复
板凳
舒伯特玫瑰|  楼主 | 2022-12-31 15:59 | 只看该作者
其中区别在于, F103的MISO要配置成输入(GPIO_MODE_INPUT), 而F030的要配置成复用(GPIO_MODE_AF_PP),的确非常奇怪。后来查询RM得知,F103的配置是:

CNFy[1:0]: Port x configuration bits (y= 0 .. 7)
These bits are written by software to configure the corresponding I/O port.
Refer to Table 20: Port bit configuration table.
In input mode (MODE[1:0]=00):
00: Analog mode
01: Floating input (reset state)
10: Input with pull-up / pull-down
11: Reserved
In output mode (MODE[1:0] > 00):
00: General purpose output push-pull
01: General purpose output Open-drain
10: Alternate function output Push-pull
11: Alternate function output Open-drain
Bits 29:28, 25:24,
21:20, 17:16, 13:12,
9:8, 5:4, 1:0
MODEy[1:0]: Port x mode bits (y= 0 .. 7)
These bits are written by software to configure the corresponding I/O port.
Refer to Table 20: Port bit configuration table.
00: Input mode (reset state)
01: Output mode, max speed 10 MHz.
10: Output mode, max speed 2 MHz.
11: Output mode, max speed 50 MHz.

使用特权

评论回复
地板
舒伯特玫瑰|  楼主 | 2022-12-31 16:05 | 只看该作者
F030的定义是:

Bits 2y+1:2y MODERy[1:0]: Port x configuration bits (y = 0..15)
These bits are written by software to configure the I/O mode.
00: Input mode (reset state)
01: General purpose output mode
10: Alternate function mode
11: Analog mode

使用特权

评论回复
5
舒伯特玫瑰|  楼主 | 2022-12-31 16:06 | 只看该作者
从中可以得知,两个片子的寄存器定义不同,所以配置当然也不同了。

使用特权

评论回复
6
舒伯特玫瑰|  楼主 | 2022-12-31 16:06 | 只看该作者
再查询手册的UART RX定义,也有同样的不同。

使用特权

评论回复
7
舒伯特玫瑰|  楼主 | 2022-12-31 16:07 | 只看该作者
再用兆易GD32F103替代STM32F103时,发现GD的定义与STM相同,但是MISO必须改为GPIO_MODE_AF_PP才能正常接收,否则SPI只能发送,接收错误。 此处认为是GD的缺陷,待确认。

使用特权

评论回复
8
Bowclad| | 2023-1-1 16:29 | 只看该作者
厉害,楼主细啊

使用特权

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

本版积分规则

51

主题

264

帖子

2

粉丝