stm8 硬件SPI
来源:互联网 发布:矩阵可逆与秩的关系 编辑:程序博客网 时间:2024/05/31 19:07
第一步:stm8 SPI简介
在配置SPI相关寄存器时要注意时钟信号的相位和极性。
这次我们使用的是stm8驱动SO-8封装的DAC8830,使其输出一个方波。
DAC8830引脚说明和时序:
CS是片选信号,低电平有效。
SCLK在下降沿的时候启动传输,上升沿的时候传输完成。MSB在前,就是高位在前。
实际电路是按照DAC8830数据手册的典型应用电路做的。
只是输出部分没有加运放,VREF引脚没有连接。
再看stm8的SPI主模式:
第二步: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介绍完毕,其他高级功能请查阅数据手册。
0 0
- stm8 硬件SPI
- stm8 nrf24l01 硬件spi成功,解决bug
- STM8 SPI的学习
- STM8 SPI主机
- STM8 SPI从机
- STM8硬件PWM设置
- stm8的硬件
- STM8 SPI 例程 通信出错
- STM8硬件线路设计基础
- STM8/STM32 SPI模式的MAX7456代码
- STM8用SPI交换1Byte数据
- MSP430 SPI硬件接口
- 硬件之SPI时序
- TI 硬件SPI调试
- 硬件SPI实现
- STM8/STM32硬件I2C读取APDS9930程序代码
- ((硬件spi+dma)+模拟spi)驱动LCD5110
- mini2440硬件篇之SPI
- jQuery.easyui与jQuery UI冲突
- Android中的Audio播放:音量和远程播放控制
- http://news.cnblogs.com/n/521109/
- VC++常规错误之一:error LNK2019: 无法解析的外部符号 "public: void __thiscall
- 在另一台电脑上部署项目引起的思考……(二)
- stm8 硬件SPI
- android状态栏沉浸效果(还没整理好,晚上整理)
- Unity3D之在指定地形中实现拖拽物体
- 解决sdk安装失败
- openwrt dns解析流程
- 安装环境之安装前准备2
- Expression language injection
- 题目编号001:二叉查找树转变成排序的双向链表
- Junit4简单教程