stm32之spi总结1
来源:互联网 发布:食品的分销网络 编辑:程序博客网 时间:2024/06/07 18:04
spi操作一定要注意spi的gpio的操作,开始因为spi_nss引脚设置成了复用推挽输出,浪费了很多时间。下面是正确的spi初始化和读写函数,在战舰开发板源码基础修改的。
void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI CS
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE); //ʹÄÜSPIÍâÉè
SPI1_ReadWriteByte(0xff);//Æô¶¯´«Êä
}
//SPI ËÙ¶ÈÉèÖú¯Êý
//SpeedSet:
//SPI_BaudRatePrescaler_2 2·ÖƵ
//SPI_BaudRatePrescaler_8 8·ÖƵ
//SPI_BaudRatePrescaler_16 16·ÖƵ
//SPI_BaudRatePrescaler_256 256·ÖƵ
void SPI1_SetSpeed(u8 SpeedSet)
{
SPI1->CR1&=0XFFC7;
SPI1->CR1|=SpeedSet;
SPI_Cmd(SPI1,ENABLE);
}
u8 SPI1_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:·¢ËÍ»º´æ¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI1, TxData); //ͨ¹ýÍâÉèSPIx·¢ËÍÒ»¸öÊý¾Ý
retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:½ÓÊÜ»º´æ·Ç¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI1); //·µ»Øͨ¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý
}
- stm32之spi总结1
- stm32的SPI总结
- STM32之SPI
- STM32之SPI
- STM32之SPI模式
- STM32-SPI之OLED
- STM32之SPI通信
- STM32之SPI的思考
- STM32之SPI库函数介绍
- STM32之SPI的使用
- STM32 SPI 自我学习总结 不断更新中
- stm32 spi 疑惑解疑 1
- stm32之spi之NSS管脚信号
- STM32学习之路之SPI通信
- STM32之SPI驱动外部Flash
- STM32 SPI
- STM32 SPI
- STM32之SPI驱动液晶屏的一个问题
- poj 1091 跳蚤(最大公约数原理+容斥原理)
- HDU-3970 最短路径问题
- 关于STM32中NVIC的理解,带错误例子
- Android百分比布局支持库(android-percent-support)
- 决定换博客了
- stm32之spi总结1
- JavaScript中字符串转JSON或者XML
- 希望自己可以更好
- HDOJ1421 搬寝室(dp)
- ArrayList 和 练习
- 坚定自我的立场,捍卫自由
- 中断分层技术
- Android 入门(2)
- http://www.zhihu.com/question/22821783/answer/22759545