专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
求大神指点如何用stm32获取AD7746数据
2019-03-23 15:05
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5469
19
1491
AD7746 芯片是测微小电容的,接口为I2C。
求做过该方面类似问题的大神指点一二,例如寄存器
此帖出自
小平头技术问答
19条回答
nevergodie
2019-03-25 21:35
nevergodie 发表于 2016-8-16 09:06
好的,谢谢指教。
#define SDA_IN {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)8<<28;GPIOB->ODR|=(unsigned int)1<<7;}
#define SDA_OUT {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)3<<28;GPIOB->ODR|=(unsigned int)1<<7;}
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
void IIC_SendByte(char ch)
{
char i;
SDA_OUT; //to enable SDATA pin as an output
AD7746_SCLK = 0; //make sure that the clock line is low
//delay(20);
for(i=0;i<8;i++)
{
AD7746_SDAout=0;
if(ch&0x80)
AD7746_SDAout=1;
else
AD7746_SDAout=0;
ch = ch<<1;
delay(5);
AD7746_SCLK = 1; //clock to send bit
delay(5);
AD7746_SCLK = 0; //clear clock
delay(5);
//move ch's bit
}
SDA_IN; //release data line for acknowledge
AD7746_SCLK = 1; //send clock for acknowledge
delay(2);
//AD7746_SDAout=1;
//delay(2);
if(!AD7746_SDAin) //no acknowledge, set flag
{
IIC_Flag |= 1<<NOACK;
}
delay(20);
AD7746_SCLK = 0; //clear clock
}
void CDC_RDCAP(void)
{
IIC_StartBit();
IIC_SendByte(SLAVEADD);
if(!(IIC_Flag&(1<<NOACK)))
IIC_SendByte(CDC_CAPDATA_ADDR);
if(!(IIC_Flag&(1<<NOACK)))
{
IIC_StartBit(); //re-start
IIC_SendByte(SLAVEADD+1); //read function
}
if(!(IIC_Flag&(1<<NOACK)))
CapResult_H = IIC_RcvByte(0); //read cap data reg
if(!(IIC_Flag&(1<<NOACK)))
CapResult_M = IIC_RcvByte(0);
if(!(IIC_Flag&(1<<NOACK)))
CapResult_L = IIC_RcvByte(1);
IIC_StopBit();
if(IIC_Flag&(1<<NOACK))
IIC_Flag |= 1<<ERR;
}
复制代码
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
单片机中把部分Flash虚拟成Eeprom使用时,如何延长使用寿命
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
敢问路在何方,STM32迈出的第一步,却注定了它非凡的一生
0个评论
年工作时间真的就等于3年工作经验?也许你就不配
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- #define SDA_IN {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)8<<28;GPIOB->ODR|=(unsigned int)1<<7;}
- #define SDA_OUT {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)3<<28;GPIOB->ODR|=(unsigned int)1<<7;}
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB,GPIO_Pin_6);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- GPIO_SetBits(GPIOB,GPIO_Pin_7);
- void IIC_SendByte(char ch)
- {
- char i;
- SDA_OUT; //to enable SDATA pin as an output
- AD7746_SCLK = 0; //make sure that the clock line is low
- //delay(20);
- for(i=0;i<8;i++)
- {
- AD7746_SDAout=0;
- if(ch&0x80)
- AD7746_SDAout=1;
- else
- AD7746_SDAout=0;
- ch = ch<<1;
- delay(5);
- AD7746_SCLK = 1; //clock to send bit
- delay(5);
- AD7746_SCLK = 0; //clear clock
- delay(5);
- //move ch's bit
- }
- SDA_IN; //release data line for acknowledge
-
- AD7746_SCLK = 1; //send clock for acknowledge
- delay(2);
- //AD7746_SDAout=1;
- //delay(2);
- if(!AD7746_SDAin) //no acknowledge, set flag
- {
-
- IIC_Flag |= 1<<NOACK;
- }
-
- delay(20);
- AD7746_SCLK = 0; //clear clock
- }
- void CDC_RDCAP(void)
- {
- IIC_StartBit();
- IIC_SendByte(SLAVEADD);
- if(!(IIC_Flag&(1<<NOACK)))
- IIC_SendByte(CDC_CAPDATA_ADDR);
- if(!(IIC_Flag&(1<<NOACK)))
- {
- IIC_StartBit(); //re-start
- IIC_SendByte(SLAVEADD+1); //read function
- }
- if(!(IIC_Flag&(1<<NOACK)))
- CapResult_H = IIC_RcvByte(0); //read cap data reg
- if(!(IIC_Flag&(1<<NOACK)))
- CapResult_M = IIC_RcvByte(0);
- if(!(IIC_Flag&(1<<NOACK)))
- CapResult_L = IIC_RcvByte(1);
- IIC_StopBit();
- if(IIC_Flag&(1<<NOACK))
- IIC_Flag |= 1<<ERR;
- }
复制代码一周热门 更多>