一个关于SPI波特率的问题,感觉书中自相矛盾了

2019-10-15 21:53发布

各位大神,最近在学习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吧,到底哪个对呢,期待解答

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-10-16 00:34
说明超频了。。。
超频不一定可以正常使用。
zhu83453958
2楼-- · 2019-10-16 02:01
怎么没人回答了
zhu83453958
3楼-- · 2019-10-16 07:53
没人帮我回答很寂寞啊
zhu83453958
4楼-- · 2019-10-16 13:13
正点原子 发表于 2016-12-24 10:18
说明超频了。。。
超频不一定可以正常使用。

我想请教下原子哥,您说的超频了是指对于SPI来说它的fPCLK原本应该是36M的吗?但它使能的时钟信号是APB2啊,这个和fPCLK没联系吗?正常的系统时钟不应该就是72M吗?
12138
5楼-- · 2019-10-16 16:54
 精彩回答 2  元偷偷看……
zhu83453958
6楼-- · 2019-10-16 20:52
正点原子 发表于 2016-12-24 10:18
说明超频了。。。
超频不一定可以正常使用。

好吧,谢谢原子哥我明白了,是我断章取意了,spi最大的速率可以到18M,而我们使用分频最大可以到36M这就是所谓的超频!谢谢您的解答。

一周热门 更多>