OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5567|回复: 3

STM32 驱动ADC0832不成功,求助那里错了

[复制链接]

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2019-5-27
在线时间
11 小时
发表于 2020-5-8 10:50:02 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 wang666yx 于 2020-5-8 18:51 编辑

用的F103ZET6,通过普通IO口到光耦隔离TLP785,驱动ADC0832,按照网上的代码移植过来后,读数一直是254,求大神帮忙看下解

#include "bsp_drv_TLC0832.h"
#include         "stdint.h"
#include  "stdio.h"

//Below for I2C operation :
//F107 72MHZ : i=3 ~=1.02us
static void delayUs(uint16_t time)
{   
   uint16_t i=0;  
   while(--time)
   {
      i=5;  //自己定义 3~=1.02us,
      while(i--) ;   
   }
}

#define _nop_ delayUs(1)
        /*

                #define        GPIO_TCS_PIN                                                GPIO_PIN_7
                #define GPIO_TCLK_PIN                                                GPIO_PIN_8
                #define GPIO_TDO_PIN                                                GPIO_PIN_9
                #define GPIO_TCLK_PORT                                        GPIOB
                #define GPIO_TDO_PORT                                                 GPIOB        
                #define GPIO_TCS_PORT                                                GPIOB

                #define        GPIO_TCS3_PIN                                                 GPIO_PIN_13
                #define GPIO_TCS3_PORT                                         GPIOC        
                        
                #define        GPIO_TCS2_PIN                                                 GPIO_PIN_1
                #define GPIO_TCS2_PORT                                         GPIOE
                        
                #define        GPIO_TDI_PIN                                                GPIO_PIN_0
                #define GPIO_TDI_PORT                                          GPIOE

        */

void TLC0832_GPIO_Init(void)
{
                GPIO_InitTypeDef GPIO_InitStruct;
                /* GPIO Ports Clock Enable */
                __HAL_RCC_GPIOB_CLK_ENABLE();        
                __HAL_RCC_GPIOC_CLK_ENABLE();        
                __HAL_RCC_GPIOE_CLK_ENABLE();        
               
              //管脚初始化,设置GPIO为普通IO口,输出方式 (PB)
        GPIO_InitStruct.Pin = GPIO_TCS_PIN|GPIO_TCLK_PIN;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP; //
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);      
        //PC
        GPIO_InitStruct.Pin = GPIO_TCS3_PIN;
        HAL_GPIO_Init(GPIO_TCS3_PORT, &GPIO_InitStruct);                        
                                //PE1(OUT)
        GPIO_InitStruct.Pin = GPIO_TCS2_PIN|GPIO_TDI_PIN;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP; //
        HAL_GPIO_Init(GPIO_TCS2_PORT, &GPIO_InitStruct);
                                //PE0(IN)
        GPIO_InitStruct.Pin = GPIO_TDO_PIN;
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pull = GPIO_PULLUP; //
        HAL_GPIO_Init(GPIO_TDO_PORT, &GPIO_InitStruct);

}

unsigned char Get_AD_Result(void)         //包含11个CLK下降沿      
{
    unsigned char i, dat;
    TCS_1();              //ADC0832未工作时,CS端为高电平,此时芯片禁用
    _nop_;               //对于延时很短的,要求在us级的,采用“_nop_”函数      
    TCLK_1();                  
    TCS_0();
    TDI_1(); TCLK_0(); _nop_; TCLK_1(); _nop_; //SCLK第一个下降沿来到时,DI = 1启动ADC0832
    TDI_1(); TCLK_0(); _nop_; TCLK_1(); _nop_; //SCLK第二个下降沿
    TDI_0(); TCLK_0(); _nop_; TCLK_1(); _nop_; //SCLK第三个下降沿,发送1,0选择通道cho
    TDI_1();                                //释放总线
    for(i = 0; i < 8; i++)                  //第4个下降沿到第11个下降沿
    {
        TCLK_0();                           //clk处于下降沿,每一个下降沿DO端输入下一个
        _nop_;                              //对于延时很短的,要求在us级的,采用_nop_函数      
        if(TDO_IN_READ()) dat |= 0x01;              // dat = dat | 0x01,dat和0x01做“或”的运算,意思是最低位置1,其它位保持不变。
        else dat |= 0x00;
                TCLK_1(); _nop_;                      //clk处于上升沿
        dat <<= 1;                          //数据左移
    }
        TCS_1();                                  //ADC0832停止工作
        //printf("Get_AD_Result = %x. \r\n", dat );
    return (dat);
}        


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-27
在线时间
0 小时
发表于 2020-5-8 10:50:05 | 显示全部楼层
初级入门者,不懂,帮顶
回复

使用道具 举报

0

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-5-6
在线时间
0 小时
发表于 2020-5-8 16:27:25 | 显示全部楼层
帮顶,谢谢支持开源电子网,支持正点原子。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-7-12
在线时间
10 小时
发表于 2021-5-5 15:50:24 | 显示全部楼层
你好,32驱动ADC0832你调试成功了没?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 14:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表