我是靠谱客的博主 动人滑板,最近开发中收集的这篇文章主要介绍stm32锯齿波c语言程序,STM32使用硬件IIC操作DAC芯片MCP4726输出锯齿波,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include "mcp4726.h"

/*          命令位  VREF1 VREF0  PD1  PD0   G

1.命令位 //MCP47X6 支持的命令

C2  C1  C0

0   0   x  写易失性DAC 寄存器命令

0   1   0  写易失性存储器命令

0   1   1  写所有存储器命令

1   0   0  写易失性配置位命令

2.VREF1 VREF0  梯形电阻网络电压基准(VRL)选择位

0     x     VDD       无缓冲

1     0     VREF引脚  无缓冲

1     1            VREF引脚  缓冲

3.PD1  PD0

0    0    正常工作

0    1    1KΩ电阻接地

1    0    125KΩ电阻接地

1    1           640KΩ电阻接地

4.G         增益选择位

0 =1x (增益为1)

1 =2x (增益为2)   VDD作VRL不适用

*/

//   C2  C1  C0  VREF1 VREF0  PD1  PD0   G

//    1  0    0    1     1     0    0    0    0x98  写易失性配置位命令

//写配置

void MCP4726_Writecmd(u16 data)

{

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));

/*起始位*/

I2C_GenerateSTART(I2C2, ENABLE);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter);           //设置MCP4726设备地址  0xc0 写,0xc1 读

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* Send data */

I2C_SendData(I2C2, data);

while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/*停止位*/

I2C_GenerateSTOP(I2C2, ENABLE);

}

void MCP4726_WriteData_Digital(u16 data)   //12位数字量

{

u8 data_H=0,data_L=0;

data_H = ( 0x0F00 & data) >> 8;

data_L = 0X00FF & data ;

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));

/*起始位*/

I2C_GenerateSTART(I2C2, ENABLE);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter);           //设置MCP4726设备地址  0xc0 写,0xc1 读

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* Send data */

I2C_SendData(I2C2, data_H);

while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData(I2C2, data_L);

while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/*停止位*/

I2C_GenerateSTOP(I2C2, ENABLE);

}

void MCP4726_WriteData_Voltage(u16 Vout)   //电压单位mV

{

u8 temp = 0;

u16 Dn = 0;

Dn = ( 4096 * Vout) / 3300;

temp = (0x0F00 & Dn) >> 8;

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));

/*起始位*/

I2C_GenerateSTART(I2C2, ENABLE);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter);           //设置MCP4726设备地址  0xc0 写,0xc1 读

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* Send data */

I2C_SendData(I2C2, temp);

while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData(I2C2, Dn);

while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/*停止位*/

I2C_GenerateSTOP(I2C2, ENABLE);

}

最后

以上就是动人滑板为你收集整理的stm32锯齿波c语言程序,STM32使用硬件IIC操作DAC芯片MCP4726输出锯齿波的全部内容,希望文章能够帮你解决stm32锯齿波c语言程序,STM32使用硬件IIC操作DAC芯片MCP4726输出锯齿波所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部