2696|1

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求助!那位帮忙给说下关于更改程序可以改变输出波形峰峰值 [复制链接]

我用STM32做的DAC,现在输出波形峰峰值是2.5V,我想让他变到1V以内,望各位帮忙解决下
此帖出自ARM技术论坛
点赞 关注
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

#include "stm32f10x_lib.h"
#include "math.h"

ErrorStatus HSEStartUpStatus;
GPIO_InitTypeDef GPIO_DA;
GPIO_InitTypeDef GPIO_InitStructure;

#define  DA_CS   GPIO_Pin_14
#define  DA_SCLK  GPIO_Pin_15
#define  DA_SDI  GPIO_Pin_13
#define  DA_LDAC  GPIO_Pin_12
       
#define  Key_up  GPIO_Pin_0
#define  Key_down GPIO_Pin_8

void RCC_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
void da_cnverter(vu16 data);

int main()
{
 vu16 da_value = 0;
 vu16 i;
 vu16 Sine16bit[32] = { 0x7FFF,0x98F8,0xB0FB,0xC71C,
       0xDA81,0xEA6C,0xF640,0xFD89,
       0xFFFE,0xFD89,0xF640,0xEA6C,
       0xDA81,0xC71C,0xB0FB,0x98F8,
       0x7FFF,0x6706,0x4F03,0x38E2,
       0x257D,0x1592,0x09BE,0x0275,
       0x0000,0x0275,0x09BE,0x1592,
       0x257D,0x38E2,0x4F03,0x6706};

 RCC_Configuration();
 NVIC_Configuration();
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
                         RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
                         RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF, ENABLE);
 // CS
 GPIO_DA.GPIO_Pin   = DA_CS;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOB,&GPIO_DA);
 // SCLK
 GPIO_DA.GPIO_Pin   = DA_SCLK;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOB,&GPIO_DA);
 // SDI
 GPIO_DA.GPIO_Pin   = DA_SDI;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOB,&GPIO_DA);
 // LDAC
 GPIO_DA.GPIO_Pin   = DA_LDAC;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOB,&GPIO_DA);
 // Key_up
 GPIO_DA.GPIO_Pin   = Key_up;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA,&GPIO_DA);
 // Key_down
 GPIO_DA.GPIO_Pin   = Key_down;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA,&GPIO_DA);
 // led
 GPIO_DA.GPIO_Pin   = GPIO_Pin_6;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF,&GPIO_DA);
 // led
 GPIO_DA.GPIO_Pin   = GPIO_Pin_7;
 GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_DA.GPIO_Mode  = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF,&GPIO_DA);
 //GPIO_ResetBits(GPIOF, GPIO_Pin_6); // 输出0 亮
 //GPIO_SetBits(GPIOF, GPIO_Pin_6); // 输出1 灭
 //GPIO_WriteBit(GPIOF,GPIO_Pin_6,RESET); 
 while(1)
 {  GPIO_SetBits(GPIOF, GPIO_Pin_6); // 输出1 灭
 GPIO_SetBits(GPIOF, GPIO_Pin_7); // 输出1 灭
 /* if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0)
  {
   da_value = da_value + 1;
   GPIO_ResetBits(GPIOF, GPIO_Pin_6); // 输出0 亮
  }
   
  if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0)
  {
   da_value = da_value - 1;
   GPIO_ResetBits(GPIOF, GPIO_Pin_7); // 输出0 亮
  }
  */
  for(i=0;i<32;i++) 
   da_cnverter((Sine16bit)/10);    
 }
// return 0;
}
void RCC_Configuration(void)
{  
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
  
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {

    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
}
void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM 
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
#endif
}
void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}
void da_cnverter(vu16 data)
{
 vu16 i;
 GPIO_ResetBits(GPIOB, DA_CS);   // CS置0
    GPIO_ResetBits(GPIOB, DA_LDAC);    // LDAC一直为0
 GPIO_SetBits(GPIOB, DA_SCLK);   // clk置1

 for(i = 0;i < 16;i ++)
 {
  if(data & 0x8000)
   GPIO_SetBits(GPIOB, DA_SDI);
  else
   GPIO_ResetBits(GPIOB, DA_SDI);
  Delay(10);
  GPIO_ResetBits(GPIOB, DA_SCLK); // 时钟线置0
  data = data << 1;
  GPIO_SetBits(GPIOB, DA_SCLK);  // 时钟线置1
  
 }
 GPIO_SetBits(GPIOB, DA_CS);   // CS置1
}

 


这是我现在代码。

此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表