easyc 发表于 2018-1-25 16:21:36

[/free][hide=2,money]主函数代码,采集数据进行转换
int main(void)
{
    uart_init(115200);
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//???????????2
    sin_Generation();   
    GPIO_Configuration();
    LED_Init();                //???LED??
    TIM3_Int_Init(1,84-1); //1us
    DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值为0      
    while(1)
    {
        if(USART_RX_STA&0x8000)
        {
            AIG=USART_RX_BUF[0]*256+USART_RX_BUF[1];
            VAL=USART_RX_BUF[2]*256+USART_RX_BUF[3];
            bb=(AIG/500000.0)*360.0;
            sin_Generation();   
            USART_RX_STA=0;
        }     
    }
}
//定时器函数内的中断代码  主要进行相位角的分割,将电压信号分成一定度数,数值可调
void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //????
    {
        cc=bb+cc;
        if((cc>360)||(cc==360)) cc=cc-360;
        aa=cc;
        //Dac1_Set_Vol(sinTable[aa]);
        DAC_SetChannel1Data(DAC_Align_12b_R,vall[aa]);
    }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //???????
}

//电压部分的分割  进行度数对应电压的数组列表

void sin_Generation(void)
{
    u16 n;
    float temp;
    for(n=0;n<360;n++)
    {
        temp=(sin(2*PI*n/360)+1)*VAL;   
        temp/=1000;
        vall[n] = temp*4096/3.3;
    }   
}
[/hide][free]
本主题需向作者支付 2 枚金币 才能浏览 购买主题

郑先生 发表于 2018-1-25 17:21:29

chen 发表于 2018-1-25 20:33:30

mj8abcd 发表于 2018-1-26 14:41:09

bingbill21 发表于 2018-1-27 09:33:27

看不懂

tiny2010 发表于 2020-4-13 08:53:23

lis998 发表于 2020-4-14 18:38:08

页: [1]
查看完整版本: stm32f4正弦波频率和幅值可调(范围0-50KHz)