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

 

最近使用了MCP3208这款芯片,附上驱动代码:

u16 mcp_getAD(u8 channel)
{
u8 i=0;

//u16 temp= ((u16)channel|0x0018)<<4;
u16 temp= 0x0F80;
//0000 11 11 1 000 0000
u16 resualt=0;
//u8 temp1=0x06|(channel>>2);
//u8 temp2=channel<<6;
//temp=
GPIO_ResetBits(mcp_Port,mcp_CS);//CS=0
//

GPIO_ResetBits(mcp_Port,mcp_CLK);//CLK=0
delay_us(20);


for(i=0;i<10;i++)
{
GPIO_SetBits(mcp_Port,mcp_CLK);//CLK=1
delay_us(20);
GPIO_ResetBits(mcp_Port,mcp_CLK);//CLK=0
if(temp&0x8000)
GPIO_SetBits(mcp_Port,mcp_DOUT);//DOUT=1
else
GPIO_ResetBits(mcp_Port,mcp_DOUT);//DOUT=0
delay_us(20);
temp<<=1;

}

GPIO_SetBits(mcp_Port,mcp_CLK);//CLK=1
delay_us(20);
GPIO_ResetBits(mcp_Port,mcp_CLK);//CLK=0
delay_us(20);
GPIO_SetBits(mcp_Port,mcp_CLK);//CLK=1
delay_us(20);
GPIO_ResetBits(mcp_Port,mcp_CLK);//CLK=0
delay_us(20);

for(i=0;i<12;i++)
{
resualt<<=1;
GPIO_SetBits(mcp_Port,mcp_CLK);//CLK=1
if(GPIO_ReadInputDataBit(mcp_Port,mcp_DIN))
resualt|=0x0001;
delay_us(20);
GPIO_ResetBits(mcp_Port,mcp_CLK);//CLK=0
delay_us(20);

}
GPIO_SetBits(mcp_Port,mcp_CS);//CS=0


return resualt;
}

 

 

以上是采用模拟SPI做的,我个人更喜欢直接用IO模拟SPI,不太喜欢用芯片自带的SPI,因为用IO模拟,可以更方便的使用引脚而不受限制,

当然,模拟SPI可能在速度上没有自带SPI高,就看使用场合吧,各有优缺点。

 

如果我的淘宝店铺有您需要的宝贝,请移驾我的店铺,后续还会有更多的好玩的,好用的宝贝,敬请期待!

淘宝店铺:

https://shop237937135.taobao.com/shop/view_shop.htm?shop_id=237937135

posted on 2018-01-26 21:27  Artisan  阅读(896)  评论(0编辑  收藏  举报

导航