您尚未登录。

楼主 # 2023-04-16 20:48:14

在干什么呢
会员
注册时间: 2023-04-16
已发帖子: 2
积分: 32

有关STM32的SPI接口求助

刚入门的小白,关于SPI接口在使用时碰到了问题,求大佬指点,多谢!:)
   在做一个STM32的小车STM32F103R6T6,其中用到了0.96寸的OLED屏和一个RGB_LED灯。
  OLED屏使用了SPI通信,相应引脚和接口的对应关系为:CS--PC6; DC--PC7; RES--PC8; D1--PC9; D0--PC10。 
  OLED模块的接口定义为:D0,在 SPI和 IIC通信中为时钟管脚 ;D1,在 SPI和 IIC通信中为数据管脚; RES ,用来复位(低电平复位);DC ,数据和命令控制管脚。
  RGB_LED引脚为 PA6和 PA7,用0/1控制颜色。
  使用的是HAL库和CUBEMX。小车要一边显示测距的实时信息,一边闪烁LED。
  在用STMCUBEMX配置时,SPI显示PA6/PA7/PB3引脚被其他占用,无法使用SPI。 所以OLED的D0和D1脚是必须接在芯片的SPI口上吗?普通IO口可以进行SPI通信吗?

离线

#1 2023-04-16 20:53:48

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: 有关STM32的SPI接口求助

STM32F103R6T6 应该还有别的几组 SPI 吧?





离线

楼主 #2 2023-04-16 21:20:59

在干什么呢
会员
注册时间: 2023-04-16
已发帖子: 2
积分: 32

Re: 有关STM32的SPI接口求助

哇酷小二 说:

STM32F103R6T6 应该还有别的几组 SPI 吧?

没,芯片手册里说只有一个SPI

离线

#3 2023-04-24 12:41:13

xd-1984
会员
注册时间: 2023-03-07
已发帖子: 6
积分: 1

Re: 有关STM32的SPI接口求助

OLED用普通IO口模拟SPI驱动也是没问题的,网上IO口模拟SPI的代码很多的

离线

#4 2024-04-19 18:09:43

7466
会员
注册时间: 2024-04-07
已发帖子: 9
积分: 1

Re: 有关STM32的SPI接口求助

用软件来模拟spi,类似模拟iic那样,应该是可以的

离线

#5 2024-04-23 18:59:13

xiaoxiaoyizhi
会员
注册时间: 2024-04-23
已发帖子: 5
积分: 0

Re: 有关STM32的SPI接口求助

void LCD_SPI_gpio_config(void)
{

    gpio_mode_set(LCD_DOUT_PART, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, LCD_DOUT_PIN);
       
    gpio_mode_set(LCD_SDA_PART, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_SDA_PIN);
    gpio_output_options_set(LCD_SDA_PART, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, LCD_SDA_PIN);
    gpio_bit_set(LCD_SDA_PART, LCD_SDA_PIN);
   
    gpio_mode_set(LCD_SCL_PART, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_SCL_PIN);
    gpio_output_options_set(LCD_SCL_PART, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, LCD_SCL_PIN);
    gpio_bit_set(LCD_SCL_PART, LCD_SCL_PIN);
}


void SPI_WriteByte(uint8_t Byte)
{
    uint8_t i=0;
    for(i=0;i<8;i++)
    {
        if(Byte&0x80)
        {
            SPI_MOSI_SET;
        }
        else
        {
            SPI_MOSI_CLR;
        }
        SPI_SCLK_CLR;
        SPI_SCLK_CLR;
        SPI_SCLK_CLR;
        SPI_SCLK_SET;
        Byte<<=1;
    }
}



uint8_t SPI_ReadByte(void)
{
    uint8_t value=0,i=0,byte=0xFF;
    for(i=0;i<8;i++)
    {
        value<<=1;
        if(byte&0x80)
        {
            SPI_MOSI_SET;
        }
        else
        {
            SPI_MOSI_CLR;
        }
        byte<<=1;
        SPI_SCLK_CLR;
        LCD_delay_us(100);
        if(SPI_MISO_READ)
        {
            value += 1;
        }
        SPI_SCLK_SET;
        LCD_delay_us(100);
    }
    return value;
}

网上一搜一大把

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn