stm32 io模拟spi通信

来源:互联网 发布:苹果手机游戏推荐 知乎 编辑:程序博客网 时间:2024/06/09 20:15

首先借鉴他人的编写程序:

#define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_10)  #define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_10)  #define SCLK_H GPIO_SetBits(GPIOB, GPIO_Pin_13)  #define SCLK_L GPIO_ResetBits(GPIOB, GPIO_Pin_13)  #define MISO GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)      unsigned char SPI_SendByte(unsigned char dt)  {      u8 i;      u8 temp=0;      for(i=8;i>0;i--)      {          if(dt&0x80)MOSI_H;          else MOSI_L;          dt<<=1;          SCLK_H;          __nop();          __nop();          __nop();          temp<<=1;          if(MISO)temp++;          __nop();          __nop();          __nop();          SCLK_L;      }      return temp;  }  
最后实现自己需要的一个spi主机程序,协议规定CPOL=1,CPHA=1,高位在前,地位在后发送

#define MOSI_H GPIO_SetBits(GPIOF, GPIO_Pin_2)#define MOSI_L GPIO_ResetBits(GPIOF, GPIO_Pin_2)#define SCLK_H GPIO_SetBits(GPIOF, GPIO_Pin_1)#define SCLK_L GPIO_ResetBits(GPIOF, GPIO_Pin_1)#define CS_H GPIO_SetBits(GPIOF, GPIO_Pin_0)#define CS_L GPIO_ResetBits(GPIOF, GPIO_Pin_0)
void SPI_Init(void){  GPIO_InitTypeDef  GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2; //PF 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOF, &GPIO_InitStructure); //根据设定参数初始化GPIOF GPIO_SetBits(GPIOF,GPIO_Pin_0); //PF0 PF1 PF2 输出高 GPIO_SetBits(GPIOF,GPIO_Pin_1); GPIO_SetBits(GPIOF,GPIO_Pin_2);} unsigned char SPI_SendByte(unsigned char dt){u8 i;u8 temp=0;for(i=8;i>0;i--){CS_L;if(dt&0x80)MOSI_H;else MOSI_L;dt<<=1;SCLK_L;__nop();__nop();__nop();__nop();__nop();__nop();SCLK_H;}CS_H;return temp;}



0 0
原创粉丝点击