项目中经常会用到多路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端口复用和重映射(AFIO辅助功能时钟)
下一篇:STM32 IO口的八种方式的解释
推荐阅读
史海拾趣
随着技术的不断进步,ADMOS公司开始积极拓展国内外市场。通过与各大电子设备制造商建立紧密的合作关系,ADMOS的产品逐渐渗透到智能手机、平板电脑、笔记本电脑等消费电子产品中。同时,公司还积极开拓汽车电子、工业控制等新兴市场,为公司的持续成长注入了新的动力。
2013年,FTDI推出了最新的嵌入式视频引擎(EVE)技术产品,这一创新标志着公司进入了一个新的技术领域。EVE技术将高度先进的图形控制器、显示器、音频和触摸功能集成到单一芯片中,为智能显示器在各种终端应用中的实现提供了强大支持。这一技术的推出不仅展示了FTDI在图像处理和显示领域的深厚积累,也为其后续在更多领域的拓展奠定了基础。
AURORA公司成立于2016年,初出茅庐便面临着巨大的挑战。然而,公司的三位联合创始人Chris Urmson、J. Andrew Bagnell和Sterling Anderson均来自自动驾驶汽车领域的顶尖团队,拥有丰富的经验和深厚的技术背景。他们凭借对自动驾驶技术的深刻理解和前瞻性眼光,为AURORA的发展奠定了坚实的基础。在初创时期,AURORA通过与多家汽车制造商合作,共同设计和开发传感器、软件和数据服务,逐渐在自动驾驶领域崭露头角。
进入21世纪后,风华高科加快了国际化进程。公司积极与国际知名企业开展合作,引进先进技术和设备,提升产品竞争力。同时,公司还不断拓展海外市场,产品远销北美、东南亚等地区。这些举措不仅提升了公司的国际知名度,也为公司带来了更多的业务机会和增长空间。
Astro Industries Inc的创始人在电子行业拥有丰富的经验,他们看到了市场对于高性能电子产品的迫切需求。于是,公司从创立之初就专注于技术创新,投入大量资源进行研发。经过不懈的努力,Astro Industries Inc成功推出了一款具有颠覆性的电子产品,其性能远超当时市场上的同类产品,迅速获得了市场的认可。
在快速发展的同时,CINCH公司也注重质量管理体系的建设。公司引进了国际先进的质量管理理念和方法,建立了完善的质量管理体系,并通过了ISO9001等质量管理体系认证。这一举措不仅提升了公司的产品质量和服务水平,还增强了客户对公司的信任度和满意度。
单片机并口。串口驱动TFT彩色液晶屏 现在仅展示下单片机并口驱动TFT彩色液晶屏程序,采用INTEL8080接口,仅需要单片机片选,读写进行控制,就能对TFT液晶屏进行控制, #define X_ADDR XBYTE[0x0000] &nbs ...… 查看全部问答∨ |
|
今天看了国嵌的视频,觉得里面的交叉工具连的制作讲得很清楚、明了,之前在网上找了好多资料,不是说的很繁琐,就是讲得含糊不清。我想总结一下,希望能帮助初学者能快速的学会,其实我也是初学者!1. 需要的文件: 已经编译好的 arm-linux-gcc压 ...… 查看全部问答∨ |
|
1. 首先是拉力机的力值传感器,拉力机因为传感器的好坏决定了试验机的精度和测力稳定性,目前市场上的拉力机用传感器小力值一般用S型传感器,大力值一般用轮輻式传感器,传感器内部一般为电阻应变片式,如果应变片精度不高或固定应变片用的胶抗老化 ...… 查看全部问答∨ |
|
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当作一个变量吧 怎么理解?… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 元戎启行发布L4级自动驾驶传感解决方案,助推行业快速发展
- 罗姆推出专为智能电表优化的新型多频段无线通信LSI
- 一图看懂新能源汽车动力蓄电池回收服务网点建设和运营指南
- Phillips-Medisize 赢得合同, 将生产电子功能组合给药设备
- 贸泽开售Laird Connectivity带功率放大器的BL654PA模块
- 苹果iOS 13更新失败的常见问题解决方法汇总
- 瑞萨电子联手StradVision,开发下一代ADAS智能摄像头
- Strategy Analytics:2019年全球智能家居市场规模将超过1000亿美元
- LGE提出三大AI发展战略,竞争大战箭在弦上
- Verint摘取业内双冠:客户增长率最高,客户拥有量最多