硬汉嵌入式论坛

 找回密码
 立即注册
查看: 710|回复: 3
收起左侧

[技术讨论] STM32F411 使用DAC+DMA+TIM但不知道为什么并没有产生波形

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2025-2-18 16:08:22 | 显示全部楼层 |阅读模式
本人的DAC+DMA配置如下

#include "DACDMA.h"





//sin????
uint16_t sin_wave[64]={2048,2251,2453,2651,2843,3027,3201,3364,3513,3648,3767,3870,3953,4018,4064,4089,4094,4079,4044,3988,3914,3821,3710,3583,3440,3284,3115,2936,2748,2553,2353,2150,1945,1742,1542,1347,1159,980,811,655,512,385,274,181,107,51,16,1,6,31,77,142,225,328,447,582,731,894,1068,1252,1444,1642,1844,2047};
//??????
uint16_t triangle_wave[512]={0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,256,272,288,305,321,337,353,369,385,401,417,433,449,465,481,497,513,529,545,561,577,593,609,625,641,657,673,689,705,721,737,753,769,785,801,817,833,849,865,882,898,914,930,946,962,978,994,1010,1026,1042,1058,1074,1090,1106,1122,1138,1154,1170,1186,1202,1218,1234,1250,1266,1282,1298,1314,1330,1346,1362,1378,1394,1410,1426,1442,1458,1475,1491,1507,1523,1539,1555,1571,1587,1603,1619,1635,1651,1667,1683,1699,1715,1731,1747,1763,1779,1795,1811,1827,1843,1859,1875,1891,1907,1923,1939,1955,1971,1987,2003,2019,2035,2052,2068,2084,2100,2116,2132,2148,2164,2180,2196,2212,2228,2244,2260,2276,2292,2308,2324,2340,2356,2372,2388,2404,2420,2436,2452,2468,2484,2500,2516,2532,2548,2564,2580,2596,2612,2628,2645,2661,2677,2693,2709,2725,2741,2757,2773,2789,2805,2821,2837,2853,2869,2885,2901,2917,2933,2949,2965,2981,2997,3013,3029,3045,3061,3077,3093,3109,3125,3141,3157,3173,3189,3205,3222,3238,3254,3270,3286,3302,3318,3334,3350,3366,3382,3398,3414,3430,3446,3462,3478,3494,3510,3526,3542,3558,3574,3590,3606,3622,3638,3654,3670,3686,3702,3718,3734,3750,3766,3782,3798,3815,3831,3847,3863,3879,3895,3911,3927,3943,3959,3975,3991,4007,4023,4039,4055,4071,4087,4087,4071,4055,4039,4023,4007,3991,3975,3959,3943,3927,3911,3895,3879,3863,3847,3831,3815,3798,3782,3766,3750,3734,3718,3702,3686,3670,3654,3638,3622,3606,3590,3574,3558,3542,3526,3510,3494,3478,3462,3446,3430,3414,3398,3382,3366,3350,3334,3318,3302,3286,3270,3254,3238,3222,3205,3189,3173,3157,3141,3125,3109,3093,3077,3061,3045,3029,3013,2997,2981,2965,2949,2933,2917,2901,2885,2869,2853,2837,2821,2805,2789,2773,2757,2741,2725,2709,2693,2677,2661,2645,2628,2612,2596,2580,2564,2548,2532,2516,2500,2484,2468,2452,2436,2420,2404,2388,2372,2356,2340,2324,2308,2292,2276,2260,2244,2228,2212,2196,2180,2164,2148,2132,2116,2100,2084,2068,2052,2035,2019,2003,1987,1971,1955,1939,1923,1907,1891,1875,1859,1843,1827,1811,1795,1779,1763,1747,1731,1715,1699,1683,1667,1651,1635,1619,1603,1587,1571,1555,1539,1523,1507,1491,1475,1458,1442,1426,1410,1394,1378,1362,1346,1330,1314,1298,1282,1266,1250,1234,1218,1202,1186,1170,1154,1138,1122,1106,1090,1074,1058,1042,1026,1010,994,978,962,946,930,914,898,882,865,849,833,817,801,785,769,753,737,721,705,689,673,657,641,625,609,593,577,561,545,529,513,497,481,465,449,433,417,401,385,369,353,337,321,305,288,272,256,240,224,208,192,176,160,144,128,112,96,80,64,48,32,16,0
};
//?????
uint16_t square_wave[512]={4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4095
};


//???DAC???
void dac_config_init()
{
       
                /*????*/
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);        //??DMA??
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);        //??DAC??

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //?????2??
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);        //??GPIOA???
       
                /*GPIO???*/
        GPIO_InitTypeDef GPIO_InitStructure;                                        //?????
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;                //??????
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                //GPIO??A4
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;        //GPIO??50MHz       
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
       
       
       
        /*DMA???*/
  DMA_DeInit(DMA1_Stream5);
        DMA_InitTypeDef DMA_InitStructure;                                                                                        //???????
       
        // Ñ¡Ôñ DMA ͨµÀ£¬Í¨µÀ´æÔÚÓÚÁ÷ÖÐ
        DMA_InitStructure.DMA_Channel =DMA_Channel_7 ;
        DMA_InitStructure.DMA_PeripheralBaseAddr =  (uint32_t)(DAC_BASE+0x20);        //?????
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;        //??????,????
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                        //??????,????
       
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)sin_wave ;           //??????
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;                        //???????,????,????????
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                //???????,????,?????,?????????
       
        DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;                                                        //??????,????????
        DMA_InitStructure.DMA_BufferSize = 64;                                                                                //???????
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                //??,??????
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;               
       
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;  
       
        //³õʼ»¯DMAÁ÷£¬Á÷Ï൱ÓÚÒ»¸ö´óµÄ¹ÜµÀ£¬¹ÜµÀÀïÃæÓкܶàͨµÀ
        DMA_Init(DMA1_Stream5, &DMA_InitStructure);
       
       

               
                                                                        
       


       
       
        DAC_DeInit();
                /*DAC_InitStruct ?????*/
        DAC_InitTypeDef DAC_InitStructure;

        DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;      //????:???2??
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;  //?????
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;   //??????

       
        DAC_Init(DAC_Channel_1,&DAC_InitStructure);  //
        DAC_SetChannel1Data(DAC_Align_12b_R, 0);



       
        TIM_InternalClockConfig(TIM2);                                        
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;                    //?????
        TIM_TimeBaseInitStructure.TIM_Period = 100-1;                                         //????????
        TIM_TimeBaseInitStructure.TIM_Prescaler =100-1;                                         //??????
        TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;                                 //??????
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //??????
                                                                        
        TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);       

        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);                         //?????
                                                //?????
                /*??*/
        DMA_Cmd(DMA1_Stream5,ENABLE);
       
  DAC_DMACmd(DAC_Channel_1, ENABLE);
        TIM_Cmd(TIM2, ENABLE);                                        //???2??

        DAC_Cmd(DAC_Channel_1, ENABLE); //??DAC??1
          
       
}

感觉代码好像没什么问题,但是就是不输出波形。
测试过TIM2和PA4都能正常工作,实在搞不懂哪里出了问题,希望大佬教我

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-19 05:53:39 | 显示全部楼层
这个为什么配置的32bit
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

别的看不出问题了,可以试试我这个二代示波器工程里面的bsp_dac.c
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=45785
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2025-2-19 22:09:43 | 显示全部楼层
我有点怀疑是我手里的芯片有问题,网上看的代码都是大同小异,试了好多都不对
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-20 06:43:50 | 显示全部楼层
LINK2452 发表于 2025-2-19 22:09
我有点怀疑是我手里的芯片有问题,网上看的代码都是大同小异,试了好多都不对

直接使用我分享的代码测试下
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:36 , Processed in 0.037559 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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