STM32如何配置使用SPI通信

发布者:JoyfulSpirit5最新更新时间:2021-07-13 来源: eefocus关键字:STM32  配置  SPI通信 手机看文章 扫描二维码
随时随地手机看文章

简介:SPI是一种高速的,全双工,同步的通信总线,原理和使用简单,占用引脚资源少,是一种常用的通信方式。


STM32通常有2~3个SPI接口


根据STM32手册的使用方法:



1. Enable peripheral clock


2. Enable SCK, MOSI, MISO and NSS GPIO clocks


3. Peripherals alternate function:


 Connect the pin to the desired peripherals' Alternate Function (AF)


 Call GPIO_Init() function.


4. Program the Polarity, Phase, First Data, Baud Rate Prescaler, Slave Management,Peripheral Mode and CRC Polynomial values using the SPI_Init() function in SPI mode.


5. Configure the FIFO threshold using SPI_RxFIFOThresholdConfig() to select at which hreshold the RXNE event is generated.


6. Enable the NVIC and the corresponding interrupt using the function SPI_I2S_ITConfig() if you need to use interrupt mode.


7. When using the DMAmode


 Configure the DMA using DMA_Init() function.


 Active the needed channel Request using SPI_I2S_DMACmd() function.


8. Enable the SPI using the SPI_Cmd() function .


9. Enable the DMA using the DMA_Cmd() function when using DMA mode.


10. To use the CRC Hardware calculation feature refer to the Peripheral CRC hardware Calculation subsection.


基于STM32F3discovery开发板,STM32F303VC



使用SPI1,从机连接的是L3GD20陀螺仪,引脚连接:



SPI1_MOSI——PA7


SPI1_SCK——PA5


SPI1_MISO——PA6


NSS——PE3


代码:



void SPI_GPIO_Config(void)


{


//将SPI1_MOSI—PA7,SPI1_SCK—PA5,SPI1_MISO—PA6引脚配置为对应复用功能


//NSS—PE3为从机片选引脚,配置为推挽输出


}



void SPI_Config(void)


{


SPI_InitTypeDef SPI_InitStructure;




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_I2S_DeInit(SPI1);


SPI_Init(SPI1, &SPI_InitStructure);




SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);


SPI_Cmd(SPI1,ENABLE);


}



然后就可以用SPI接口进行收发数据,具体收发方式要根据从机设备决定


需要的时候可以配置中断,DMA等功能发送或接收数据前,先将相应从机的片选信号置零SPI是两个设备移位寄存器的数据交换,接收数据前先向从机发送虚拟字节,收到的数据就是所要读取的数据。


关键字:STM32  配置  SPI通信 引用地址:STM32如何配置使用SPI通信

上一篇:STM32按键输入程序
下一篇:STM32F2系列驱动开发——模拟I2C通信

推荐阅读最新更新时间:2024-11-10 17:41

STM32串口中断实验总结函数的初始化
STM32串口中断实验总结函数的初始化必须在变量的初始化之后在进行! 在进行串口的实验的时候,自己没有看教程,写了一段代码,但是进行编译之后发现一直有错误,就算我把代码更改之后还是一直有错误。对比了官方给的教程之后发现唯一的不同之处就是我的有一个函数的初始化是在变量的初始化之前,进行的初始化,在进行相应的知识查询之后,还有请教了师兄之后,发现了自己以前一直没有注意到的问题就是,函数的初始化必须放到变量的初始化之后,否则在使用keil也就是MDK进行建立工程的时候就会报错。 注意细节
[单片机]
<font color='red'>STM32</font>串口中断实验总结函数的初始化
STM32的USART讲解
一,串口相关寄存器 USART_SR 状态寄存器 USART_DR 数据寄存器 USART_BRR 波特率寄存器 USART_CR1 控制寄存器 USART_SR-状态寄存器:      状态寄存器USART_SR,描述串口寄存器的一些状态:      如位5:读数据寄存器非空            通过读取这个位的值,判断是否收到了完整的数据   串口已经接收到了数据,并且已经写入到了USART_DR寄存器 USART_DR-数据寄存器:         数据寄存器USART_DR,只使用了位0-8,其他位保留         读寄存器:读取该寄存器获取接收到的数据值   写寄存器:向该寄存器写入发送的数据对数据
[单片机]
STM32 CubeMX如何生成微秒(us)级延时
会自动在tim.c里面生成代码,如下: /* Includes ------------------------------------------------------------------*/ #include tim.h /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ TIM_HandleTypeDef htim17; /* TIM17 init function */ void MX_TIM17_Init(void) { htim17.Instance = TIM17; htim17.Init.Prescaler = 0; htim17.Init.CounterM
[单片机]
<font color='red'>STM32</font> CubeMX如何生成微秒(us)级延时
一款合格的家用车要有哪些安全配置
开头想问大家一个问题,你认为一名合格的老司机应该有哪些条件? 没错,老司机要具备成熟稳重、幽默风趣、资历老、见识广、经验足等条件。 另外老司机不仅开的一手好车,而且还把的一手好妹,作为情场上的老手,很多少女都逃不过他的手掌心(哈哈,这不是说的小智嘛!)。 当然,老司机身上都会携带一些安全装备,来保证他们的安全,比如杜杜。 那么,一辆合格的车的要具备哪些安全装备来保证我们的安全呢?这个老司机比较懂,让小智给大家分析分析吧! 1 .安全气囊 安全指数:★★★★★ 安全气囊的重要性不用多提了,它能在车辆撞击时,对我们的头部起到很大的缓冲作用,大大降低撞击对于我们身体的伤害。一些高档的车型还配备了头部侧气帘和膝部气囊,安全性也大大提高,但
[汽车电子]
ST 基于STM32的税控器方案
随着金税工程的推广,税控市场将得到迅猛发展,税控器作为四大税控产品之一,其市场份额不容小觑,税控厂家需要为产品的性能、成本做多方面考量。之前各个厂家的税控器方案,可能因为成本的考虑选择了8位单片机,也有因为性能扩展的需要选择16位、32位MCU作为税控器主控芯片。今天,ST(意法半导体公司)延续了其之前基于STR7的税控器体系架构,并借鉴在STR9银税一体机方案中的经验,推出了一款采用STM3这一高性能、低成本芯片的税控器方案。 方案介绍   与以往方案(图1)对比,STM32方案(图2)结构简单,模块功能化,减少了外部数据总线的数量,有效减小制板面积,很好地保证了系统的可靠性及安全性。ST还提供详细的设计报告,无
[单片机]
ST 基于<font color='red'>STM32</font>的税控器方案
STM32通过sram启动方法来运行一个flash解锁程序
STM32通过sram启动方法 最近将两年前买的STM32F103最小系统板拿出来准备学习,安装完MDK5后写了一个点亮LED程序,发现无法下载。查了下购买评论,原来这种板子发货时已经锁定了flash。鼓捣了2、3天,最后采取的办法是通过sram启动方式,来运行一个flash解锁程序,程序运行后就可以将板子恢复。在此将该过程记录下来。 一、系统板外形是这种。 二、硬件跳线 将两个黄色跳线帽全部插在1端,即BOOT0、BOO1全部接1。 三、MDK5设置 3-1、新建一个工程,取名Flash_Unlock。设置Run-time,选择CMSIS- CORE、Device- Startup、Device- StdPeriph D
[单片机]
<font color='red'>STM32</font>通过sram启动方法来运行一个flash解锁程序
关于stm32定时器的理解
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 表面意思是输出控制极性为高,但是意思是定时器输入0,不反相,输出0; 输出控制极性为低,定时器输入0,反相输出1; CC1E控制开关。 #define TIM_OCPolarity_High ((uint16_t)0x0000) #define TIM_OCPolarity_Low ((uint16_t)0x0002) 定时器通道写法: TIM_OC2 意思是定时器channel 2 ,TIM_OC1意思是定时器通道1. //小波Linux pwm占空比: TIM_Se
[单片机]
关于<font color='red'>stm32</font>定时器的理解
STM32硬件电路设计注意事项
1、电源 1) 、无论是否使用模拟部分和AD 部分,MCU 外围出去VCC 和GND,VDDA 、VSSA 、Vref(如果封装有该引 脚)都必需要连接,不可悬空; 2) 、对于每组对应的VDD 和GND 都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠 近MCU; 2、复位、启动选择 1) 、Boot引脚与JTAG无关。它仅是用于MCU启动后,判断执行代码的起始地址; 2) 、在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或电源(为0或1),切不可悬空; 3 、ADC 1) 、ADC 是有工作电压的,且与MCU 的工作电压不完全相同。MCU 工
[单片机]
热门资源推荐
热门放大器推荐
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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