历史上的今天
今天是:2025年02月18日(星期二)
2020年02月18日 | stm8 硬件SPI
2020-02-18 来源:eefocus
第一步: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介绍完毕,其他高级功能请查阅数据手册。
上一篇:stm8s 开发SPI的两种方法
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 使用 DSL 传输 Internet 协议电视 (IPTV) 是一种新兴的、令人振奋的技术,可以为服务提供商提供全新的商业机遇。ADSL2+ 和 VDSL2 数据速率可以轻松实现在一根电话线上集成语音、视频和数据服务 ...… 查看全部问答> |
|
问题描述: 在“private void btnDiagnosticClicked(object sender, EventArgs e)”方法中 执行“RecData = MainMenu.socketHH.GetRecData();”“RecData”一直接收为空。 而在“private void ReceiveCallback(IAsyncResult ar)”方法中 “recB ...… 查看全部问答> |
|
做UC/os移植,做时钟节拍,在中断中,只有执行OSIntExit功能,系统就无论如何也进不了TIME1的时间中断了,但软中断可以执行。弄到头痛了都不知什么原因,郁闷中…… void T1TIMI_IRQHandler(void) { TIM_FlagClear ( TIM1 , ...… 查看全部问答> |
|
我们在利用F449进行设计一个电流表,在对固定电阻取电压时考虑以下几个问题: 1.F449的供电电压是9v(我是说那个变压器),那么对于单片机进行AD转换时的驱动电压是多少?也就是我所能得到的电压的范围是多少?? 2.F449在进行AD转换过程中,所 ...… 查看全部问答> |
|
关于quartus仿真中的simulation report不能获取问题!! 我用的是modelsim-altera仿真的,具体是写好testbench后自动调用web版的modelsim进行仿真,但是仿真结束后再processing中的simulation report总是无法获取,请大家帮我想想怎么才能得到它呢,这个报告里有宏模块ram仿真的数据的。。。… 查看全部问答> |
|
发现网上关于TI的LM4F120 Launchpad 资料太少了,其中大部分都是TI员工或者其合作伙伴提供的,例程太少,导致新手上手很慢 我只是要实现几路PWM波输出而已,昨天努力了一天,发现并不容易,至少没有可参考的例程,好在我不断地找资料,最后终于写 ...… 查看全部问答> |




