驱动程序——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;
}

时间: 2024-10-08 02:37:11

驱动程序——MCP4922——基于STM32F103的相关文章

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

TLC7226 8 位,5us 四路 DAC,并行输入.单/双电源 时序图: void IO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin=DAC1_A0|DAC1_A1|DAC1_WR|

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

MAX6675冷端温度补偿.热电偶数字转换器可进行冷端温度补偿,并将K型热电偶信号转换成数字信号.数据输出为12位分辨率.SPI兼容.只读格式.转换器温度分辨率为0.25°C,可读取温度达+1024°C,热电偶在0°C至+700°C温度范围内精度为8 LSB. #include <stdio.h> #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "MAX6675.h&quo

PCI/PCIe接口卡Windows驱动程序(2)-开发者需要了解的WDF中的一些重要的概念

本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法. 在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中的概念,对开发者了解WDF非常有帮助,属于“内功部分”: 本篇文章结构将没那么清晰,当句句都是作者通过看书.看论文.看MSDN提炼出来的,希望对读者能够有所帮助. 1.WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱动可以采用“黑盒”方式,所以windbg不是必须的: 2.WDF比WDM好,别再用WDM了: 3.驱

STM32F103频率和AD采集项目总结

刚刚做了我的第一个嵌入式项目----基于STM32F103的频率和AD采集系统. 是一个大系统的一个部分,没用操作系统,使用库函数编写,虽然东西很简单,但是对于我这个还没入门的菜鸟来说还是有点难度的.前后断断续续已经两周多了,到目前为止系统已经完成了接近90%,在这个过程中犯了很多错误,也走了很多的弯路,在这里记录下来,让自己以后不要再犯同样的错误,也给那些和我一样刚入门的朋友一点提示. 1.USART初始化问题: STM32F103启动文件默认有两个入口,一个是systemInit(),另一个

STM32F103频率和AD採集项目总结

刚刚做了我的第一个嵌入式项目----基于STM32F103的频率和AD採集系统. 是一个大系统的一个部分.没用操作系统,使用库函数编写,尽管东西非常easy.可是对于我这个还没入门的菜鸟来说还是有点难度的. 前后断断续续已经两周多了.到眼下为止系统已经完毕了接近90%,在这个过程中犯了非常多错误.也走了非常多的弯路.在这里记录下来.让自己以后不要再犯相同的错误.也给那些和我一样刚入门的朋友一点提示. 1.USART初始化问题: STM32F103启动文件默认有两个入口.一个是systemInit

Windows打印体系结构之打印机驱动程序类型

有个铺位旁边养了一支玫瑰,它本跟这个地方不搭,然而现在它开在这里也没什么所谓了. 1.3.打印机驱动程序 打印机驱动程序(Printer driver),指的是计算机的打印设备打印机的硬件驱动程序,该驱动程序承担将计算机上的应用程序数据转换成打印机能够识别.打印的数据的格式.它是操作系统与硬件之间的纽带.如果按照打印机所支持的打印机语言来分类,又可以分为三种类型: 基于主机驱动程序(Host-Based Driver) 基于PCL的驱动程序 基于Postscript的驱动程序 1.3.1.基于主

驱动程序开发——占楼贴

工作或学习的过程中,遇到一些芯片,这些芯片需要有相应的驱动才能工作,因此在此贴出相关代码,与大家一起学习进步. 驱动代码都是根据芯片手册里面的时序图编写的 ,有了芯片手册时序图,驱动代码就容易多了,可能初学者看不懂时序图,多看看别人的代码,就能慢慢了解,后面就可以自己写了. 近期将陆续贴出以下芯片的驱动代码: 其中,基于STM32F103的器件有:MCP3208,AD7606,ADS1230,ADS1256,CS5550,TLC7226等,主要是低速ADC和DAC 基于FPGA(Verilog)

记一次基于vmware的gentoo安装

采用GPT分区,只要一个根分区无swap分区,系统是64位的,最终采用systemd(gentoo默认是openrc),安装简洁版的X11和简洁版的KDE,注意是在vmware上安装的,不是实体机...全部安装可能要十几个小时,其中编译和安装软件耗时大 下载gentoo 1) 下载地址:https://www.gentoo.org/downloads/ (官网比较慢,一般我去http://mirrors.163.com/gentoo/下载) 这里有 Minimal Installation CD

《嵌入式怎么学?新人十问及解答》

常见的ARM嵌入式学习问答,设计者和学习者最关心的11个问题:1.ARM嵌入式是学习硬件好还是学习软件好? 2.嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要? 3.学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9? 4.到底是学习哪种内核:ARM7.CORTEX-M3.CORTEX-M4.ARM9.CORTEX-A8还是CORTEX-A9? 5.ARM芯片如何选择型号? 6.学习ARM主要学习啥? 7.是先学习基于操作系统的应用层程序的编程,还是先学习基