spi 设置speed
2016-06-01 15:22
239 查看
//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);
}
//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开发板手册 |
相关文章推荐
- Apache Thrift
- Track your local R scheduled tasks with CommandCenter2000!!!
- Android获取屏幕高度、状态栏高度、标题栏高度
- 关于设备的唯一标识符
- 用PDB库调试Python程序
- 宏与内联
- Java中的equals和hashCode方法详解
- 数据结构之链表
- java反射机制
- 自己总结的hql新增、删除、查询与sql的新增、删除、查询区别
- 央企、创业企业、金融大企业的对比
- 【数据结构学习】相关学习资源汇总
- Linux下TCP/IP网络编程——结课考试知识总结
- Java原型模式
- 文件地理数据库的大小和名称限制
- 将textfield文本粘贴复制以中文显示
- iOS原生与H5交互WKWebView
- BS版代码生成器 简介
- linux stat函数
- 详解Java的MyBatis框架中的事务处理