找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 597|回复: 14
收起左侧

STM32CBT6单片机SPI通信,端口重定义引脚PA15,PB3,PB4,PB5

[复制链接]
ID:1102481 发表于 2024-1-25 15:12 | 显示全部楼层 |阅读模式
300黑币
描述:原本使用的SPI2,端口PB12.13.15   PA0  正常显示   对应  CS,SCLK,SDA,RS(命令/数据)
         换成SPI1,端口 PA15,PB3.4.5                               对应  CS,SCLK,RS(命令/数据),SDA    问题:换了以后,不能显示。只换PA15,可以显示,所以问题出在PB345这块。请教大家
#include "SPI.h"

void GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
        
                //对应的SCK   PB3
                GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
                GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);
                GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
        
            //MOSI为 SDA       PB 5  
                GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);
    GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
               
                //MISO__A0 --  PB4        
                GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
                GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);
    GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

        //液晶初始化I/O口  rst      PA0  --rst
    GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_0;        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
        //片选    PA15___CS
                GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
                GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void SPI_Initial()
{

        SPI_InitTypeDef  SPI_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;//设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;        //设置SPI工作模式:设置为主SPI
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//设置SPI的数据大小:SPI发送接收8位帧结构
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//选择了串行时钟的稳态:时钟悬空高
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;         //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//定义波特率预分频的值:波特率预分频值为2
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
  SPI_Init(SPI1, &SPI_InitStructure);         //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

  SPI_Cmd(SPI1, ENABLE);
}

void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;
  /*RCC 复位和时钟设置*/
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();                                         //时钟管理重置

  /* Enable HSE 外部高速晶振*/
  RCC_HSEConfig(RCC_HSE_ON);                   //打开外部晶振

  /* Wait till HSE is ready 等待外部晶振 就绪, 返回值:SUCCESS 就绪,ERROR 未就绪*/
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);    //Flash读取缓冲启动Flash预取值    加速

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);                                            //Flash操作的延时设置Flash_Latency延时2周期

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                                         //AHB使用系统时钟

    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);                                  //APB2(高速)为HCLK的一半
        
    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);                           //APB1(低速)为HCLK的一半
        //注:AHB主要负责外部存储器时钟。APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM
    /* ADCCLK = PCLK2/4 */
    RCC_ADCCLKConfig(RCC_PCLK2_Div4);        //默认4

    /* PLLCLK = 8MHz * 7 = 56 MHz   注意此处的8M是指的外部晶振的大小*/  
        
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);      //PLLCLK = 8MHz * 9 = 72 MH      默认为7  

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);                                                                                //启动PLL

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}       //等待PLL启动

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                                //将PLL设置为系统时钟源

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08){}                          //等待系统时钟源的启动
  }
}

void SPI_SendData(uint8_t byte)
{
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);   
  SPI_I2S_SendData(SPI1, byte);
}

最佳答案

查看完整内容

或许你我的手上的手册不一样? 我手上的这份明白表示,PB3/4/5,没有原生态SPI接口,连映射的都没有。既然本就没有,你映射过去也依然没用。 至于只换PA15可以,是因为你的SPI_NSS是由软件控制的,可以是任意IO。 而硬件控制,则需跟随SPIx的群组走了。 附上手册,其中第21页你看一下。 如果确定有SPI,那恐怕是要查一下外围了。
回复

使用道具 举报

ID:1102481 发表于 2024-1-26 10:12 | 显示全部楼层
cocolala 发表于 2024-1-25 21:17
看下JTAG默认的IO口,注意映射问题。

如图,JTAG 占用PA15,PB3.PB4,       已经用代码         RCC_APB2PeriphClockCmdRCC_APB2Periph_AFIO,ENABLE);                                                                               GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);                                                                               GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);




开启AFIO,将PB3.4变为普通口子,不知道哪里还是不行。




1706234833762.png
回复

使用道具 举报

ID:69038 发表于 2024-1-25 15:12 | 显示全部楼层
或许你我的手上的手册不一样?
我手上的这份明白表示,PB3/4/5,没有原生态SPI接口,连映射的都没有。既然本就没有,你映射过去也依然没用。
至于只换PA15可以,是因为你的SPI_NSS是由软件控制的,可以是任意IO。
而硬件控制,则需跟随SPIx的群组走了。

附上手册,其中第21页你看一下。
STM32F103X8.pdf (15.39 MB, 下载次数: 3)
回复

使用道具 举报

ID:1102481 发表于 2024-1-25 15:14 | 显示全部楼层
这个是测试包,问题在   SPI和LCD12864部分

测试.7z

170.05 KB, 下载次数: 2

回复

使用道具 举报

ID:883242 发表于 2024-1-25 16:03 | 显示全部楼层
stm32更新换代好多次了,具体型号都不肯说谁也帮不了你,说了其实也没用因为太多了,还是自己用CubeMX配置一下好一些。

如果是第一代STM32F103才可以用这个STDPeripheral库。
回复

使用道具 举报

ID:161164 发表于 2024-1-25 16:08 | 显示全部楼层
30块包邮的逻辑分析仪,你值得拥有
回复

使用道具 举报

ID:137005 发表于 2024-1-25 16:12 | 显示全部楼层
STM32 PB3 PB4 PB5作为普通IO,用作SPI使用
https://blog.csdn.net/feiyingzaishi/article/details/103108929

评分

参与人数 1黑币 +12 收起 理由
卫玉书 + 12 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:226055 发表于 2024-1-25 21:17 | 显示全部楼层
    看下JTAG默认的IO口,注意映射问题。
回复

使用道具 举报

ID:1102481 发表于 2024-1-26 10:04 | 显示全部楼层
Hephaestus 发表于 2024-1-25 16:03
stm32更新换代好多次了,具体型号都不肯说谁也帮不了你,说了其实也没用因为太多了,还是自己用CubeMX配置 ...

不好意思,打错字了,STM32F103C8T6,第一次用这个悬赏,提示我有%词汇,然后可能删除的时候,漏了。
确实太多了。具体问题已经指出,SPI1端口重映射的问题,但是可能第一次用端口映射,这里面问题不清楚在哪里,所以求助大家,也不知道如何将悬赏给大家
回复

使用道具 举报

ID:1102481 发表于 2024-1-26 10:06 | 显示全部楼层
Hephaestus 发表于 2024-1-25 16:03
stm32更新换代好多次了,具体型号都不肯说谁也帮不了你,说了其实也没用因为太多了,还是自己用CubeMX配置 ...

好的,谢谢你的建议
回复

使用道具 举报

ID:1102481 发表于 2024-1-26 10:14 | 显示全部楼层
lkc8210 发表于 2024-1-25 16:08
30块包邮的逻辑分析仪,你值得拥有

小白,第一次听说,好的,我看看。谢谢
回复

使用道具 举报

ID:69038 发表于 2024-1-26 11:53 | 显示全部楼层
103Cx系列貌似没有SPI3。甚至低容量版本(<64K)的只有一个SPI1
只有在STM32F103Rx/Vx/Zx中,PB3/4/5才是SPI3,
在CBT6中PB3/4/5只是GPIO和Jlink接口,也不能映射到SPI1,你要的SPI1在PA4/5/6。
回复

使用道具 举报

ID:1102481 发表于 2024-1-26 17:14 | 显示全部楼层
zhuls 发表于 2024-1-26 11:53
103Cx系列貌似没有SPI3。甚至低容量版本(

是的,没有用到SPI3,原来用的SPI2,后来IO不够,改成用SPI1。
我的问题就是如何正确的在基础代码基础上,成功改到SPI1(注意看题)。然后8楼是C8T6的引脚资源,
关闭JTAG,开启AFIO,   PB5的IIC也关了,SPI2也试着关了,暂时没用。
回复

使用道具 举报

ID:1102481 发表于 2024-1-29 10:16 | 显示全部楼层
zhuls 发表于 2024-1-25 15:12
或许你我的手上的手册不一样?
我手上的这份明白表示,PB3/4/5,没有原生态SPI接口,连映射的都没有。既然 ...

感谢 ,您的手册和我的确实不一样。我又看了一下这个数据手册,确实有SPI1的映射,不过您的关于PA15的回答确实解决了我一个困惑,,谢谢您无私的指点。我再找找其他问题,祝新年快乐
回复

使用道具 举报

ID:1102481 发表于 2024-1-29 10:19 | 显示全部楼层
molo 发表于 2024-1-25 16:12
STM32 PB3 PB4 PB5作为普通IO,用作SPI使用
https://blog.csdn.net/feiyingzaishi/article/details/103108 ...

实在抱歉,最佳答案只能有一个,感谢您的指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表