OpenEdv-开源电子网

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

STM32F429通过spi控制外部DAC(新人求助)

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-7-13
在线时间
1 小时
发表于 2017-7-13 09:52:32 | 显示全部楼层 |阅读模式
1金钱
各位大佬,小弟遇见一个很玄学的问题,已经这个上面耽误一周多了,没找到问题所在:

问题描述:
用STM32控制ADI公司的AD5761(16位DAC),通过IO口自己写的时序,没有直接调用函数;
在STM32F103的小黑板子上没有问题,可以控制DAC的电压输出
但是同样的程序移到原子的STM32F429的板子上,DAC一点反应也没有,实在不知道是什么原因导致的
硬件上面都没问题,连线检查好几遍,更奇怪的是,STM32F429的引脚输出波形也没问题与STM32F103的引脚输出波形的时序是一样的
但是用F103的板子就有输出,用F429就没有。。。。。
小弟是新人,金钱不多,希望各位大佬多多指导
下面附上程序:
############################STM32F429的程序##################
#include "sys.h"
#include "delay.h"
#include "usart.h"

#define  LED0_H  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET)
#define  LED0_L  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET)

#define  LED1_H  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET)
#define  LED1_L  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET)

#define  SYNC_H  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)
#define  SYNC_L  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)

#define  SCLK_H  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET)
#define  SCLK_L  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET)

#define  SDIN_H  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET)
#define  SDIN_L  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET)

#define  LDAC_H  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_SET)
#define  LDAC_L  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_RESET)

#define  RESET_H  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET)
#define  RESET_L  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET)

#define  CLEAR_H  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_SET)
#define  CLEAR_L  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_RESET)

void IO_Init(void);
void DAC_Init(void);

#define START 0x00030000
#define END   0x0003FFF0  
#define STEP  0x00000008

uint32_t data;
uint32_t temp=      0x00800000;
uint32_t tempdata = 0x00000000;
uint32_t con=       0x00040065;
void Delay(u32 count)
{
  u32 i=0;
  for(;i<count;i++);
}
int main(void)
{        
      HAL_Init();                    
    Stm32_Clock_Init(360,25,16,8);  
    delay_init(180);               
    IO_Init();
      DAC_Init();   
      data = START;     
while(1)
{
        LED0_L;
        LED1_H;
        Delay(300000);
        LED0_H;
        LED1_L;
        Delay(300000);  
       SCLK_H;
        temp =     0x00800000;
       tempdata = 0x00000000;
       SYNC_L;
      for (int i=0;i<24;i++)
        {  
          SDIN_L;
            SCLK_H;
     tempdata = temp & con;              
                    if(!tempdata)                 
                    {        
                            SDIN_L;   
                    }                                          
                    else            
                    {            
              SDIN_H;
                    }                             
     temp=temp>>1;               
     SCLK_L;     
        }   
        SYNC_H;
      
        temp=    0x00800000;
       tempdata=0x00000000;
      
        SYNC_L;
                for (int i=0;i<24;i++)
                {
                    SDIN_L;
                    SCLK_H;
                     
                     tempdata = temp & data;              
                     if(!tempdata)                 
                        {        
                            SDIN_L;
                        }                                          
                        else            
                        {            
                            SDIN_H;   
                        }                                    
                      temp=temp>>1;        
                      SCLK_L;
                }   
    SYNC_H;   
        
      data = data + STEP;
                                    
                if(data>=END)
                {
                     data=START;        
                }

                }
}


void DAC_Init(void)
{
     RESET_H;
     RESET_L;
     RESET_H;
     CLEAR_H;
     LDAC_L;
     SYNC_H;   
     SCLK_H;
     SDIN_L;
}

void IO_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
   
    __HAL_RCC_GPIOA_CLK_ENABLE();         
      __HAL_RCC_GPIOB_CLK_ENABLE();
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOH_CLK_ENABLE();
   
    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
   
      GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_7;
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
   
      GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; //PB1,4,5
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
    HAL_GPIO_Init(GPIOC,&GPIO_Initure);
   
      GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; //PH13,14,15
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);

    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);   
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);   
}
############################STM32F103的程序##########################
#include "stm32f10x.h"

#define  SYNC_H  GPIO_SetBits(GPIOA,GPIO_Pin_3)
#define  SYNC_L  GPIO_ResetBits(GPIOA,GPIO_Pin_3)

#define  SCLK_H  GPIO_SetBits(GPIOA,GPIO_Pin_1)
#define  SCLK_L  GPIO_ResetBits(GPIOA,GPIO_Pin_1)

#define  SDIN_H  GPIO_SetBits(GPIOA,GPIO_Pin_2)
#define  SDIN_L  GPIO_ResetBits(GPIOA,GPIO_Pin_2)

#define  LDAC_H  GPIO_SetBits(GPIOA,GPIO_Pin_6)
#define  LDAC_L  GPIO_ResetBits(GPIOA,GPIO_Pin_6)

#define  RESET_H  GPIO_SetBits(GPIOA,GPIO_Pin_4)
#define  RESET_L  GPIO_ResetBits(GPIOA,GPIO_Pin_4)

#define  CLEAR_H  GPIO_SetBits(GPIOA,GPIO_Pin_5)
#define  CLEAR_L  GPIO_ResetBits(GPIOA,GPIO_Pin_5)

#define  LED0_H  GPIO_SetBits(GPIOA,GPIO_Pin_8)
#define  LED0_L  GPIO_ResetBits(GPIOA,GPIO_Pin_8)

#define  LED1_H  GPIO_SetBits(GPIOD,GPIO_Pin_2)
#define  LED1_L  GPIO_ResetBits(GPIOD,GPIO_Pin_2)

#define START 0x00030000
#define END   0x0003FFF0  
#define STEP  0x0000000F

uint32_t data;
uint32_t temp=    0x00800000;
uint32_t tempdata=0x00000000;
uint32_t con=     0x00040065;
int i1,mod=1;


void IO_Config(void);
void DAC_Config(void);

void Delay(u32 count)
{
  u32 i=0;
  for(;i<count;i++);
}

int main(void)
{   
  IO_Config();
    DAC_Config();
    data = START;
     

while(1)
{

      LED0_L;
        LED1_H;
        Delay(300000);
        LED0_H;
        LED1_L;
   
        Delay(300000);
   
      SCLK_H;
        temp =     0x00800000;
       tempdata = 0x00000000;
    SYNC_L;
      for (i1=0;i1<24;i1++)
        {  
          SDIN_L;
            SCLK_H;
     tempdata = temp & con;              
                    if(tempdata==0)                 
                    {        
                            SDIN_L;   
                    }                                          
                    else            
                    {            
              SDIN_H;
                    }            
                    
     temp=temp>>1;               
     SCLK_L;     
        }   
        SYNC_H;
      
        temp=    0x00800000;
       tempdata=0x00000000;
      
        SYNC_L;
                for (i1=0;i1<24;i1++)
                {
                    SDIN_L;
                    SCLK_H;
                     
                     tempdata = temp & data;              
                     if(tempdata==0)                 
                        {        
                            SDIN_L;
                        }                                          
                        else            
                        {            
                            SDIN_H;   
                        }                                    
                      temp=temp>>1;        
                      SCLK_L;
                }   
    SYNC_H;   
        
      data = data + STEP;
                                    
                if(data>=END)
                {
                     data=START;        
                }

                }
}


void IO_Config(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
     
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);   
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  GPIO_SetBits(GPIOA,GPIO_Pin_6);                                 
     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  GPIO_SetBits(GPIOA,GPIO_Pin_1);                                 
     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
  GPIO_SetBits(GPIOA,GPIO_Pin_2);                                
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
  GPIO_SetBits(GPIOA,GPIO_Pin_3);                                 
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  GPIO_SetBits(GPIOA,GPIO_Pin_4);                                 
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
  GPIO_SetBits(GPIOA,GPIO_Pin_5);                                
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  GPIO_SetBits(GPIOA,GPIO_Pin_8);               
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;                 
  GPIO_Init(GPIOD, &GPIO_InitStructure);                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
  GPIO_SetBits(GPIOD,GPIO_Pin_All);                                    
}

void DAC_Config(void)
{
     RESET_H;
     RESET_L;
     RESET_H;
     SDIN_L;
     LDAC_L;
     SYNC_H;
     SCLK_H;
}

STM32F103

STM32F103

STM32F429

STM32F429


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-7-13 23:19:28 | 显示全部楼层
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2016-6-8
在线时间
8 小时
发表于 2017-10-17 10:23:38 | 显示全部楼层
for循环里面的第一个  SDIN_L 还需要吗?
回复

使用道具 举报

4

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2017-3-11
在线时间
78 小时
发表于 2017-10-17 11:57:05 | 显示全部楼层
看原子的啊 啊啊啊啊啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 19:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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