基于stm8s103f3p单片机的四线 硬件SPI接口驱动程序源码

void Driver_SPION(void)

        //开启时钟
        CLK_PCKENR1 |= SETBIT1;
        //控制寄存器CR1先清零
        SPI_CR1 = 0x00;   
        //配置通信波特率1Mbps
        SPI_CR1 &= 0xC7;        
        //配置时钟的相位与极性
        //空闲状态时,SCK保持低电平
        SPI_CR1 &= CLRBIT1;                    
        //数据采样从第一个时钟边沿开始
        SPI_CR1 &= CLRBIT0;        
        //定义帧格式
        //通信时,串行移位,高位在前,低位在后
        SPI_CR1 &= CLRBIT7;    
        //设置SPI工作模式
        //NSS引脚软件管理 
        SPI_CR2 |= SETBIT1;
        SPI_CR2 |= SETBIT0;
        //主设备选择
        SPI_CR1 |= SETBIT2;
        //端口配置为快速摆率
        PC_DDR |= SETBIT5;
        PC_CR1 |= SETBIT5;
        PC_CR2 |= SETBIT5;
        PC_DDR |= SETBIT6;
        PC_CR1 |= SETBIT6;
        PC_CR2 |= SETBIT6;
        PC_CR1 |= SETBIT7;    
        //使能SPI
        SPI_CR1 |= SETBIT6;
}

/***************************************************************************
*  Function: Driver_SPISend                                                                     
*  Object:  SPI发送数据                                                                                       
*  输入: &DataBuff 发送数据缓存的头指针;DataLen 发送数据的个数;       
*  输出: 无                                                                              
*  备注: 主模式 四线连接 硬件SPI sck    mosi misi                                                   
/***************************************************************************/
void Driver_SPISend(u8 *DataBuff,u16 DataLen)
{
        u8 temp;
        //执行发送
        for(;DataLen>0;DataBuff++,DataLen--)
        {
            //等待发送
            while(!(SPI_SR&CHSBIT1));
            //发送数据
            SPI_DR = *DataBuff;
        }
        //等待总线空闲 
        temp = SPI_DR;
        while(SPI_SR&CHSBIT7);
}

/***************************************************************************
*  Function: Driver_SPIReceive                                                                 
*  Object:  SPI接收数据                                                                                       
*  输入: &DataBuff 接收数据缓存的头指针;DataLen 接收数据的个数;        
*  输出: 无                                                                              
*  备注: 主模式 四线连接 硬件SPI sck    mosi misi                     
/***************************************************************************/
void Driver_SPIReceive(u8 *DataBuff,u16 DataLen)
{
        //执行接收
        for(;DataLen>0;DataBuff++,DataLen--)
        {
            //等待接收
            while(!(SPI_SR&CHSBIT0));
            //接收数据
            *DataBuff = SPI_DR;
        }
        //等待总线空闲 
        while(SPI_SR&CHSBIT7);
}

//程序从这里开始运行
main()
{
        //初始化硬件SPI
        Driver_SPION();
        //可以开始进行外设SPI接口通信控制
        //发送
        //Driver_SPISend...
        //接收
        //Driver_SPIReceive...
        //接收
        //OK
        while (1);
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJZGRB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值