新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2017-7-13
- 在线时间
- 1 小时
|
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;
}
|
|