驱动程序——MCP4922——基于STM32F103

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了驱动程序——MCP4922——基于STM32F103相关的知识,希望对你有一定的参考价值。

技术分享

#include <stdio.h>
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "MCP4922.h"
#include "Delay.h"

#define SCLK_H GPIO_SetBits(MCP4922_PORT, MCP4922_SCK)
#define SCLK_L GPIO_ResetBits(MCP4922_PORT, MCP4922_SCK)
#define DOUT_H GPIO_SetBits(MCP4922_PORT, MCP4922_SDI)
#define DOUT_L GPIO_ResetBits(MCP4922_PORT, MCP4922_SDI)


void Init_MCP4922_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_MCP4922 , ENABLE); 
GPIO_InitStructure.GPIO_Pin = MCP4922_SCK | MCP4922_CS|MCP4922_SDI|MCP4922_LDAC|MCP4922_SHDN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(MCP4922_PORT, &GPIO_InitStructure);
GPIO_SetBits(MCP4922_PORT, MCP4922_CS );//CS=1;
GPIO_ResetBits(MCP4922_PORT, MCP4922_SCK );//SCK=0;
GPIO_SetBits(MCP4922_PORT, MCP4922_LDAC);//CS=1;
GPIO_SetBits(MCP4922_PORT, MCP4922_SHDN);//CS=1;
}




void MCP4922_DAC(uint16_t data,char channel)//convert the 12 bit data
{
char i;
GPIO_ResetBits(MCP4922_PORT, MCP4922_CS);//CS=0;
if(channel==0)
data=data|0x3000;
else
data=data|0xB000;
for(i=0;i<=15;i++)
{
if(data&0x8000)//MSB  =1 or 0;
DOUT_H;
else
DOUT_L;
SCLK_H;//read data SO
Delay(10);
data<<=1;
SCLK_L;
Delay(10);
}
GPIO_SetBits(MCP4922_PORT, MCP4922_CS);//CS=1;
SCLK_H;
Delay(10);
GPIO_ResetBits(MCP4922_PORT, MCP4922_LDAC);//CS=1;
SCLK_L;
Delay(10);
GPIO_SetBits(MCP4922_PORT, MCP4922_LDAC);//CS=1;
}

 
 
























































以上是关于驱动程序——MCP4922——基于STM32F103的主要内容,如果未能解决你的问题,请参考以下文章

在 STM32f10x 中使用 EEPROM

STM32WB55 或 STM32F10 上的裸机编程

STM32F10系列的命名规则和分类

关于 CMSIS 标准 及 STM32F10x的固件库

2STM32F10x软件准备

STM32F10驱动A4988步进电机驱动模块程序