stm8 硬件SPI

第一步:stm8 SPI简介



在配置SPI相关寄存器时要注意时钟信号的相位和极性。



这次我们使用的是stm8驱动SO-8封装的DAC8830,使其输出一个方波。



DAC8830引脚说明和时序:



CS是片选信号,低电平有效。

SCLK在下降沿的时候启动传输,上升沿的时候传输完成。MSB在前,就是高位在前。

实际电路是按照DAC8830数据手册的典型应用电路做的。


只是输出部分没有加运放,VREF引脚没有连接。

再看stm8SPI主模式:


第二步:SPI相关寄存器


设置时钟极性CPOL和相位CPHA仅需设置SPI_CR1的第0位和第1位。




第三步:具体实现

void Spi_Init(void)
{
  CLK_PCKENR1 |= 0x02;  //打开SPI时钟
  /*PC6、PC5设置为输出,最大10MHz*/
  PC_DDR = 0x70;
  PC_CR1 = 0x70;
  PC_CR2 = 0x70; 
/*MSB、1MHz、主设备、CPOL空闲为低、CPHA第一个时钟开始*/
  SPI_CR1 = 0x04;
/*双线单向视距传输、CRC计算禁止、软件NSS、主模式*/
  SPI_CR2 = 0x03;
/*开启SPI*/
  SPI_CR1|= 0x40;
}
/*DAC8830是TI的16位DA*/
void Spi_Send(u16 data)  
{
  PC_ODR_ODR4 = 0;          //拉低片选
  SPI_DR = (u8)(data>>8);  //先发高八位
  SPI_DR = (u8)data;       //再发低八位
  while(!(SPI_SR&0x02));   //等待发送区为空
  PC_ODR_ODR4 = 1;         //拉高片选
}
int main( void )
{
  u16 i;
  System_Init();  //系统时钟初始化
  Gpio_Init();    //PE5初始化
  Spi_Init();     //Spi初始化
  while (1)
  {
    Spi_Send(i);  //输出阶梯波
    delay_ms(50);
    i++;
    if(i==65535)i = 0;
    PE_ODR ^= 0x20;  //PE5取反
  }
}

关于时钟和GPIO端口的配置请看 《stm8 点亮第一个LED》

通过示波器测试出DAC8830的输出脚,波形如图:


至此stm8的硬件SPI介绍完毕,其他高级功能请查阅数据手册。









  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值