久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1004|回復: 2
打印 上一主題 下一主題
收起左側

求教N32G45X單片機DAC+TIM+DAM生成正弦波頻率不準

[復制鏈接]
跳轉到指定樓層
樓主
ID:1066092 發表于 2023-3-11 13:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
參考網上ST的例子,在注釋掉TIM_TrgoInit里的TIM2或者TIM4,只使用DAC1在PA4上能得到正確的56.25K或者只使用DAC2在PA5上也能得到正確的102.27K正弦波出來,但是只要將同時使用TIM2和TIM4讓DAC1和DAC2同時輸出正弦波,那么PA4還是正確的56.25K波,而PA5就只有80K多點跳動范圍大,而且也不是正確的102.27K,求問幫忙指點指點下面是哪里不正確搞成這樣的錯誤結果?
另外還有個問題是輸出電壓峰峰值不是3.3V,官方例子出來的電壓是約1.6V,輸出頻率不一樣電壓峰峰值也會不一樣,我這頻率大概是2.7V,這又是為什么?按說打點是0~4095那么輸出電壓基本應該就是基準上的0~3.3V這樣,實際上怎么差那么遠還隨頻率的變化電壓還不同,奇了怪了。

單片機源程序如下:
  1. #include "n32g45x.h"

  2. /** @addtogroup DAC_DualModeDMA_SineWave
  3. * @{
  4. */

  5. //#define DAC_DHR12RD_Address 0x40007420
  6. #define DAC_DR12CH1_Address 0x40007408
  7. #define DAC_DR12CH2_Address 0x40007414

  8. /* Init Structure definition */
  9. DAC_InitType DAC_InitStructure;
  10. uint32_t Idx = 0;

  11. const uint16_t Sine12bit[32] = {2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056, 3939,
  12.                                 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,  599,  344,
  13.                                 155,  38,   0,    38,   155,  344,  599,  909,  1263, 1647};

  14. uint32_t DualSine12bit[32];

  15. void RCC_Configuration(void);
  16. void GPIO_Configuration(void);
  17. void TIM_TrgoInit(void);
  18. void DAC_SineWaveInit(void);
  19. void DMA_Config(void);

  20. /**
  21. * @brief   Main program.
  22. */
  23. int main(void)
  24. {

  25.     GPIO_Configuration();
  26.     TIM_TrgoInit();
  27.     DAC_SineWaveInit();

  28.     /* Fill Sine32bit table */
  29. //    for (Idx = 0; Idx < 32; Idx++)
  30. //    {
  31. //        DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
  32. //    }
  33.     /* DMA Config */
  34.     DMA_Config();

  35.                 TIM_Enable(TIM2, ENABLE);
  36.                 TIM_Enable(TIM4, ENABLE);
  37.     while (1)
  38.     {
  39.     }
  40. }

  41. /**
  42. * @brief  Configures the different system clocks.
  43. */
  44. void RCC_Configuration(void)
  45. {
  46.     /* DAC Periph clock enable */
  47.     RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_DAC, ENABLE);
  48. }

  49. /**
  50. * @brief  Configures the different GPIO ports.
  51. */
  52. void GPIO_Configuration(void)
  53. {
  54.     GPIO_InitType GPIO_InitStructure;

  55.     /* GPIOA Periph clock enable */
  56.     RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
  57.     GPIO_InitStructure.Pin       = GPIO_PIN_4 | GPIO_PIN_5;
  58.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  59.     GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
  60. }
  61. /**
  62. * @brief  TIM4 Init.
  63. */
  64. void TIM_TrgoInit(void)
  65. {
  66.     TIM_TimeBaseInitType TIM_TimeBaseStructure;

  67.     /* TIM4 Periph clock enable */
  68.     RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM2  , ENABLE); // RCC_APB2_PERIPH_TIM8
  69.                 RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM4  , ENABLE);
  70.     TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
  71.                 TIM_TimeBaseStructure.Period           =39;
  72.     TIM_TimeBaseStructure.Prescaler = 0x0;
  73.     TIM_TimeBaseStructure.ClkDiv    = 0x0;
  74.     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
  75.                 TIM_InitTimeBase(TIM2, &TIM_TimeBaseStructure);        
  76.         
  77.                 TIM_TimeBaseStructure.Period                =21;
  78.     TIM_TimeBaseStructure.Prescaler = 0x0;
  79.     TIM_TimeBaseStructure.ClkDiv    = 0x0;
  80.     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
  81.                 TIM_InitTimeBase(TIM4, &TIM_TimeBaseStructure);

  82.                 TIM_SelectOutputTrig(TIM2, TIM_TRGO_SRC_UPDATE);        
  83.                 TIM_SelectOutputTrig(TIM4, TIM_TRGO_SRC_UPDATE);
  84. }
  85. /**
  86. * @brief  DAC SineWave Config.
  87. */
  88. void DAC_SineWaveInit(void)
  89. {
  90.     /* DAC Periph clock enable */
  91.     RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_DAC, ENABLE);

  92.                 DAC_InitStructure.Trigger                        = DAC_TRG_T2_TRGO;
  93.     DAC_InitStructure.WaveGen      = DAC_WAVEGEN_NONE;
  94.     DAC_InitStructure.BufferOutput = DAC_BUFFOUTPUT_DISABLE;
  95.                 DAC_Init(DAC_CHANNEL_1, &DAC_InitStructure);
  96.         
  97.                 DAC_InitStructure.Trigger                        = DAC_TRG_T4_TRGO;
  98.     DAC_InitStructure.WaveGen      = DAC_WAVEGEN_NONE;
  99.     DAC_InitStructure.BufferOutput = DAC_BUFFOUTPUT_DISABLE;
  100.                 DAC_Init(DAC_CHANNEL_2, &DAC_InitStructure);

  101.                 DAC_Enable(DAC_CHANNEL_1, ENABLE);
  102.                 DAC_Enable(DAC_CHANNEL_2, ENABLE);

  103.                 DAC_DmaEnable(DAC_CHANNEL_1, ENABLE);
  104.                 DAC_DmaEnable(DAC_CHANNEL_2, ENABLE);
  105.         
  106. }
  107. /**
  108. * @brief  DMA Config.
  109. */
  110. void DMA_Config(void)
  111. {
  112.     DMA_InitType DMA_InitStructure;

  113.     /* DMA2 clock enable */
  114.     RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA2, ENABLE);

  115. //                DMA_DeInit(DMA2_CH3);
  116.                 DMA_InitStructure.PeriphAddr                = DAC_DR12CH1_Address;
  117.                 DMA_InitStructure.MemAddr                                = (uint32_t)&Sine12bit;
  118.     DMA_InitStructure.Direction      = DMA_DIR_PERIPH_DST;
  119.     DMA_InitStructure.BufSize        = 32;
  120.     DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
  121.     DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
  122.     DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
  123.     DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord ;
  124.     DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
  125.     DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
  126.     DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
  127.                 DMA_Init(DMA2_CH3, &DMA_InitStructure);
  128.                 DMA_EnableChannel(DMA2_CH3, ENABLE);

  129. //                DMA_DeInit(DMA2_CH4);
  130.                 DMA_InitStructure.PeriphAddr                =DAC_DR12CH2_Address;
  131.                 DMA_InitStructure.MemAddr                                = (uint32_t)&Sine12bit;
  132.     DMA_InitStructure.Direction      = DMA_DIR_PERIPH_DST;
  133.     DMA_InitStructure.BufSize        = 32;
  134.     DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
  135.     DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
  136.     DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
  137.     DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord ;
  138.     DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
  139.     DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
  140.     DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
  141.                 DMA_Init(DMA2_CH4, &DMA_InitStructure);

  142.                 DMA_EnableChannel(DMA2_CH4, ENABLE);
  143.                
  144. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1066092 發表于 2023-3-13 22:46 | 只看該作者
自己來頂下,卡這里幾天了不知道問題在哪里,參考論壇“STM32F103單片機輸出兩路不同頻率的正弦波源程序”對比了下似乎我上面的配置應該是能生成正確頻率的正弦波,但是用兩個定時器有一個生成的頻率就是和實際計算的不同,壇里的兄弟能幫忙看看我這個配置是哪里有問題還是這個芯片配置有特殊地方?先多謝了!
回復

使用道具 舉報

板凳
ID:301191 發表于 2023-3-14 00:11 | 只看該作者
頂一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 日韩在线免费视频 | 国产成人综合在线 | 亚洲成人免费 | 国产91在线 | 中日 | 久久久.com| 日韩中文一区 | 日韩不卡一区二区 | 中文字幕第二十页 | 国产免费一区二区三区 | 午夜手机在线视频 | 国产精品综合 | 久www| 精品久久久久久久人人人人传媒 | 人人人干 | 精品久久九 | 亚洲一区久久 | 国产日产精品一区二区三区四区 | 亚洲一区二区三区在线播放 | 精精国产xxxx视频在线播放7 | 国产色婷婷精品综合在线播放 | 亚洲成在线观看 | 欧美精品一区二区三区视频 | 国产999精品久久久久久 | www亚洲成人 | 91国内产香蕉 | 97超碰在线播放 | 国产欧美一区二区三区免费 | 欧美黑人体内she精在线观看 | 国产精品3区 | 日韩一区二区在线视频 | 亚洲国产高清高潮精品美女 | 羞羞网站免费 | 国产精品美女在线观看 | 色毛片 | 亚洲精品乱码久久久久久久久 | 亚洲激情一区二区 | 国产一级电影网 | 免费看国产片在线观看 | 五月激情综合 | 日韩av在线一区 |