各位大神,最近在学习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吧,到底哪个对呢,期待解答
超频不一定可以正常使用。
我想请教下原子哥,您说的超频了是指对于SPI来说它的fPCLK原本应该是36M的吗?但它使能的时钟信号是APB2啊,这个和fPCLK没联系吗?正常的系统时钟不应该就是72M吗?
好吧,谢谢原子哥我明白了,是我断章取意了,spi最大的速率可以到18M,而我们使用分频最大可以到36M这就是所谓的超频!谢谢您的解答。
一周热门 更多>