单片机
返回首页

spi 设置speed

2022-02-15 来源:eefocus

//SPI 速度设置函数

//SpeedSet:

//SPI_SPEED_2   2分频   (SPI 12M    --sys 24M)

//SPI_SPEED_8   8分频   (SPI 3M     --sys 24M)

//SPI_SPEED_16  16分频  (SPI 1.5M    --sys 24M)

//SPI_SPEED_256 256分频 (SPI  905.6K --sys 24M)

void SPI1_SetSpeed(u8 SpeedSet)

{

         SPI1->CR1&=0XFFC7;//Fsck=Fcpu/256

     if(SpeedSet==SPI_SPEED_2)//二分频

     {

          SPI1->CR1|=0<<3;//Fsck=Fpclk/2=36Mhz 

     }else if(SpeedSet==SPI_SPEED_8)//八分频 

     {

          SPI1->CR1|=2<<3;//Fsck=Fpclk/8=9Mhz 

     }else if(SpeedSet==SPI_SPEED_16)//十六分频

     {

          SPI1->CR1|=3<<3;//Fsck=Fpclk/16=4.5Mhz

     }


    else      //256分频

     {

          SPI1->CR1|=7<<3; //Fsck=Fpclk/256=281.25Khz 低速模式

     }

     SPI1->CR1|=1<<6; //SPI设备使能   


//SPI 速度设置函数

//SpeedSet:

//SPI_BaudRatePrescaler_2   2分频   

//SPI_BaudRatePrescaler_8   8分频   

//SPI_BaudRatePrescaler_16  16分频  

//SPI_BaudRatePrescaler_256 256分频 

  

void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)

{

  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));

SPI2->CR1&=0XFFC7;

SPI2->CR1|=SPI_BaudRatePrescaler; //设置SPI2速度 

SPI_Cmd(SPI2,ENABLE); 



STM32 SPI时钟的问题

APB1的最高频率是36MHz,APB2的最高频率是72MHz,而PCLK1和PCLK2一般也默认配置为其最高工作频率36M和72M,如下表所示:


SPI1时钟由APB2时钟分频而来,可以选择2、4、8、16、32、64、128、256这几个分频系数。而手册规定STM32的SPI时钟最快是18MHz。对于STM32F103的SPI1接口时钟,由72M的PCLK2分频得到,所以分配系数大于等于4(72M/4 = 18M)。对于STM32F103的SPI2/3接口时钟,由36M的PCLK1分频得到,所以分配系数大于等于2(36M/2 = 18M)。

如果配置SPI1时选择了fPCLK/2的二分频选项,那么理论上SPI1的时钟将为36MHz,经过我们实际测量也确实为36MHz。但是这个频率大于手册中最快18Mhz的要求。如果大家追求高速率使用36MHz,建议大家一定要加强测试环节,同时不建议大家在工控产品等高可靠性的场合使用。


--摘自神舟STM32开发板手册


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章