STM8S1003 硬件SPI 驱动 SI4432 注意CPOL = 0,CPHA=0

stm8 硬件spi 驱动 si4432 如果想看模拟的 我有另外一篇博文写有代码。

这个硬件驱动 si4432 我弄了几乎一天时间,我一边看波形一边分析数据,可是spi驱动一直没有成功。

第二天发现原来spi CPHA 相位应该选择 数据采样从第一采样边缘开始。 我之前不知道浪费了一天时间。心疼。

下面直接上代码:

MyType.h

#ifndef __MyType_H
#define __MyType_H


#ifndef BIT
#define BIT(x)	(1 << (x))
#endif

/* io configs */
#ifndef sbi  
#define sbi(io,bit)		( io  |=  (1<<bit) )
//example:sbi(GPIOA->ODR,0);sbi(GPIOA->DDR,0);
#endif 

#ifndef cbi  
#define cbi(io,bit)		( io  &= ~(1<<bit) )	
//example:cbi(GPIOA->ODR,0);cbi(GPIOA->DDR,0);
#endif 

#ifndef xor  
#define xor(port, bit)          (port) ^= (1 << (bit))
#endif

#ifndef gbi  
#define gbi(pin ,bit)	( pin &   (1<<bit) )	
//example: gbi(GPIOA->IDR,0);
#endif 


#endif

spi.c

#include "spi.h"
#include "ALL_Includes.h"

/*********************************************
函数功能:SPI初始化
输入参数:无
输出参数:无
备    注:无
*********************************************/
void SPI_Init(void)
{   
    SPI_IOConfig(); 

    SPI->CR1 |= BIT(5)|BIT(3)|BIT(2); //主设备,高位先发,2分频  采集从第一时钟开始
    SPI->CR2 |= BIT(1)|BIT(0);//nss软件管理  
    SPI->CR2 &=~(BIT(2)|BIT(7));//双线单向模式、全双工
    
    SPI->CR1 |= BIT(6); //使能SPI BIT(6)
   
}

/*********************************************
函数功能:SPI IO初始化
输入参数:无
输出参数:无
备    注:无
*********************************************/
void SPI_IOConfig(void)
{
     //设置SPI_SCK为输出
    SPI_SCK_GPIO->DDR  |=  SPI_SCK ;//输出模式
    SPI_SCK_GPIO->CR1  |=  SPI_SCK ;//推挽输出
    
     //设置PC6SPI_MOSI为输出
    SPI_MOSI_GPIO->DDR |=  SPI_MOSI;//输出模式
    SPI_MOSI_GPIO->CR1 |=  SPI_MOSI;//推挽输出
  
      //设置SPI_CS为输出
    SPI_CS_GPIO->DDR   |=  SPI_CS;//输出模式
    SPI_CS_GPIO->CR1   |=  SPI_CS;//推挽输出
    
       //设置SPI_MISO为输入
    SPI_MISO_GPIO->DDR &= ~SPI_MISO;//输入模式
    SPI_MISO_GPIO->CR1 |=  SPI_MISO;//上拉输入

}

/*********************************************
函数功能:SPI读写函数
输入参数:Data:需要写入的数据
输出参数:无
备    注:无
*********************************************/
u8 SPI_RW(u8 Data)
{

   while(!(SPI->SR&0X02));//等待发送缓冲区为空
   SPI->DR =Data;
   
   while(!(SPI->SR&0X01));//等待接收缓冲区为非空
   return (SPI->DR);      
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值