历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2018年08月27日 | STM32 的SPI总线配置

发布者:bobojrt 来源: eefocus关键字:STM32  SPI  总线配置 手机看文章 扫描二维码
随时随地手机看文章

     项目中经常会用到多路SPI,但是各路的配置又不尽相同,其中SPI3默认状态是JLINK模式,所以如果想正常使用SPI3,就需要对其重映射。下面给出SPI2和SPI3的配置程序,该配置已验证。

   验证MCU:STM32F107  

   1、SPI2配置

     void SPI_Init(void)
{
uint32_t cnt;
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef  SPI_InitStructure;

/* 使能 SPI2 时钟 */                         
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);

/* ---------通信I/O初始化----------------
* PB13-SPI2-SCK 
* PB14-SPI2-MISO
* PB15-SPI2-MOSI 
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用输出
GPIO_Init(GPIOB, &GPIO_InitStructure);


/* -------- 片选I/O初始化----------------*/
/* PB12-SPI2-NSS:ENC28J60_CS */ 
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
      GPIO_Init(GPIOB, &GPIO_InitStructure);  
      GPIO_SetBits(GPIOB, GPIO_Pin_12); // 先把片选拉高,真正用的时候再拉低

/* ---------复位I/O初始化----------------*/
/* PE6_RST */ 
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
     GPIO_Init(GPIOE, &GPIO_InitStructure);  
     GPIO_SetBits(GPIOE, GPIO_Pin_6);// 先把复位拉高,真正用的时候再拉低复位

/* SPI2 配置 */ 
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);

/* 使能 SPI2  */
SPI_Cmd(SPI2, ENABLE);
}


2、SPI3配置

   需要注意的是:

 (1)开启AFIO时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 

 (2)使能SWD :GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ;

void SPI3_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef  SPI_InitStructure; 

/* 使能 SPI3时钟 */                         
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA |        RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ;

/* ---------通信I/O初始化----------------
* PB3-SPI3-SCK 
* PB4-SPI3-MISO
* PB5-SPI3-MOSI 
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   // 复用输出
GPIO_Init(GPIOB, &GPIO_InitStructure);


/* --------- 片选I/O初始化----------------*/
/* PB12-SPI2-NSS:ENC28J60_CS */ 
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出  GPIO_Mode_Out_PP
      GPIO_Init(GPIOA, &GPIO_InitStructure);  
      GPIO_SetBits(GPIOA, GPIO_Pin_15); // 先把片选拉高,真正用的时候再拉低

/* ---------复位I/O初始化----------------*/
/* PE6-ENC28J60_RST */ //复位引脚
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
       GPIO_Init(GPIOC, &GPIO_InitStructure);  
       GPIO_SetBits(GPIOC, GPIO_Pin_9); // 先把复位拉高,真正用的时候再拉低复位

/* SPI3 配置 */ 
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI3, &SPI_InitStructure);

/* 使能 SPI3  */
SPI_Cmd(SPI3, ENABLE); 
}


关键字:STM32  SPI  总线配置 引用地址:STM32 的SPI总线配置

上一篇:STM32端口复用和重映射(AFIO辅助功能时钟)
下一篇:STM32 IO口的八种方式的解释

推荐阅读

东芝MG07 14TB SATA机械硬盘已完成超微优选存储服务器平台可用性认证【2018年7月4日-深圳】硬盘机领导品牌台湾东芝电子零组件股份有限公司于近日宣布,超微电脑股份有限公司正式授予MG07ACA系列14TB和12TB硬盘SATA两种型号硬盘超微优选存储服务器平台可用性认证。新款MG07ACA系列采用9盘片充氦密封设计,实现了高能效容量和高存储密度,适用于目前超微...
领益智造在过去一年连续“踩雷”后,与原借壳的江粉磁材纠纷不断,但其经营业绩似乎已大为好转。8月25日晚间,领益智造发布2019年半年报显示,公司上半年实现营收959,625.36万元,较上年同期下降2.25%;实现利润总额125,494.01万元,较上年同期增长354.96%;归属于母公司所有者的净利润111,430.91万元,较上年同期增长291.72%。领益智造披露,公司营收同比...
智能电视市场在拉丁美洲地区迎来了巨大的发展机遇。据媒体市场研究公司Dataxis预测,到2020年底,拉丁美洲地区智能电视机安装量将达到1.11亿台,占该地区电视设备总量的41.4%。拉丁美洲地区智能电视市场快速发展的原因有许多解释。自2016年以来,互联网接入功能业已成为大多数在售电视设备的基本功能之一。此外,在一些发展中国家,例如巴西和墨西哥,由于...
据36氪消息,无锡沐创集成电路设计有限公司(以下简称“沐创”)获亿元A轮融资。本轮融资由清控银杏领投,力合创投、基石基金跟投,老股东招商局资本、励石创投持续加码。本轮融资资金将主要用于产品研发生产、人才引进。目前,天眼查显示,沐创股东包括:北京骁卫集成电路科技合伙企业(有限合伙)、华控技术转移有限公司、扬帆致远产业投资基金(苏州)...

史海拾趣

问答坊 | AI 解惑

单片机驱动TFT彩色液晶屏(程序)

单片机并口。串口驱动TFT彩色液晶屏 现在仅展示下单片机并口驱动TFT彩色液晶屏程序,采用INTEL8080接口,仅需要单片机片选,读写进行控制,就能对TFT液晶屏进行控制,         #define X_ADDR XBYTE[0x0000] &nbs ...…

查看全部问答∨

wince看门狗的问题

wince启动后,怎样判断这次启动是看门狗重启,还是正常启动?…

查看全部问答∨

arm-linux-gcc 交叉工具链的安装方法

今天看了国嵌的视频,觉得里面的交叉工具连的制作讲得很清楚、明了,之前在网上找了好多资料,不是说的很繁琐,就是讲得含糊不清。我想总结一下,希望能帮助初学者能快速的学会,其实我也是初学者!1. 需要的文件: 已经编译好的 arm-linux-gcc压 ...…

查看全部问答∨

申请MSP-EXP430FR5739实验板套件

这个板子上面也有仿真器还有加速度传感器 还是铁电 正好用于学习 可以配合手头的零件DIY挺多有意思的东西…

查看全部问答∨

发重复了

发重复了 [ 本帖最后由 damiaa 于 2012-5-6 11:18 编辑 ]…

查看全部问答∨

急死了

马上就要答辩了 还没弄好毕业设计 愁愁愁~~…

查看全部问答∨

按这五要素选购拉力机准没错

1. 首先是拉力机的力值传感器,拉力机因为传感器的好坏决定了试验机的精度和测力稳定性,目前市场上的拉力机用传感器小力值一般用S型传感器,大力值一般用轮輻式传感器,传感器内部一般为电阻应变片式,如果应变片精度不高或固定应变片用的胶抗老化 ...…

查看全部问答∨

高速PCB设计之布局篇

 高速PCB设计之布局篇                                  & ...…

查看全部问答∨

LM3S9B96好像被锁了,但是LM Flash Program解锁没效果?

下载程序和编译时报错,用LM Flash Program解锁试了好多次也没能弄好。不知道有没有碰到过这种情况的。 芯片型号: …

查看全部问答∨

请详细讲解一下#define st(x) do { x } while (__LINE__ == -1)

#define st(x)      do { x } while (__LINE__ == -1) 那么程序中 st( EA = 0; );//EA当作一个变量吧 怎么理解?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved