各位大神,最近在学习SPI时,发现一个问题,书中在介绍SPI_InitTypeDef结构体中有一句话是这样写的
“第七个参数 SPI_BaudRatePrescaler 很关键,就是设置 SPI 波特率预分频值也就是决定 SPI 的时
钟的参数,从不分频道 256 分频 8 个可选值,初始化的时候我们选择 256 分频值
SPI_BaudRatePrescaler_256, 传输速度为 36M/256=140.625KHz。”
按书上的意思那我是否可以理解为SPI最大的波特率只能是18M,
而STM32使用手册中对波特率的表述却是(波特率最大为f PCLK /2),而在使能SPI时,使用的却是APB2时钟,那最大波特率应该是36M啊?
书中还有以下一个函数
//SPI 速度设置函数
//SpeedSet:
//SPI_BaudRatePrescaler_2 2 分频 (SPI 36M
@sys 72M)
//SPI_BaudRatePrescaler_8 8 分频 (SPI 9M@sys 72M)
//SPI_BaudRatePrescaler_16 16 分频 (SPI 4.5M@sys 72M)
//SPI_BaudRatePrescaler_256 256 分频 (SPI 281.25K@sys 72M
void SPI1_SetSpeed(u8 SpeedSet)
{
SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1,ENABLE);
}
按括号里的意思应该也是最大波特率为36M吧,到底哪个对呢,期待解答
还是要更正自己的问题一下,问题出在书上用的是SPI2,SPI2用的是APB1的系统时钟是36M,而SPI1的时钟是APB2,系统时钟频率是72M
一周热门 更多>