Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. #include <stm32f4xx.h>
  2.  
  3. #define OUT_FREQ 5000 // Output waveform frequency
  4. #define SINE_RES 128 // Waveform resolution
  5. #define DAC_DHR12R1_ADDR 0x40007408 // DMA writes into this reg on every request
  6. #define CNT_FREQ 42000000 // TIM6 counter clock (prescaled APB1)
  7. #define TIM_PERIOD ((CNT_FREQ)/((SINE_RES)*(OUT_FREQ))) // Autoreload reg value
  8.  
  9. const uint16_t function[SINE_RES] = { 2048, 2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
  10. 2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
  11. 3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
  12. 4013, 4019, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
  13. 3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344,
  14. 3269, 3191, 3110, 3027, 2941, 2853, 2763, 2671, 2578, 2483,
  15. 2387, 2291, 2194, 2096, 1999, 1901, 1804, 1708, 1612, 1517,
  16. 1424, 1332, 1242, 1154, 1068, 985, 904, 826, 751, 679,
  17. 610, 545, 484, 426, 373, 323, 278, 237, 201, 169,
  18. 141, 118, 100, 87, 79, 75, 76, 82, 93, 109,
  19. 129, 154, 184, 218, 257, 300, 347, 399, 455, 514,
  20. 577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,
  21. 1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047 };
  22.  
  23. static void TIM6_Config(void);
  24. static void DAC1_Config(void);
  25.  
  26. int main()
  27. {
  28. GPIO_InitTypeDef gpio_A;
  29.  
  30. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  31. RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  32. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
  33.  
  34. gpio_A.GPIO_Pin = GPIO_Pin_4;
  35. gpio_A.GPIO_Mode = GPIO_Mode_AN;
  36. gpio_A.GPIO_PuPd = GPIO_PuPd_NOPULL;
  37. GPIO_Init(GPIOA, &gpio_A);
  38.  
  39. TIM6_Config();
  40. DAC1_Config();
  41.  
  42. while (1)
  43. {
  44.  
  45. }
  46.  
  47. }
  48.  
  49. static void TIM6_Config(void)
  50. {
  51. TIM_TimeBaseInitTypeDef TIM6_TimeBase;
  52.  
  53. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
  54.  
  55. TIM_TimeBaseStructInit(&TIM6_TimeBase);
  56. TIM6_TimeBase.TIM_Period = (uint16_t)TIM_PERIOD;
  57. TIM6_TimeBase.TIM_Prescaler = 0;
  58. TIM6_TimeBase.TIM_ClockDivision = 0;
  59. TIM6_TimeBase.TIM_CounterMode = TIM_CounterMode_Up;
  60. TIM_TimeBaseInit(TIM6, &TIM6_TimeBase);
  61. TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
  62.  
  63. TIM_Cmd(TIM6, ENABLE);
  64. }
  65.  
  66. static void DAC1_Config(void)
  67. {
  68. DAC_InitTypeDef DAC_INIT;
  69. DMA_InitTypeDef DMA_INIT;
  70.  
  71. DAC_INIT.DAC_Trigger = DAC_Trigger_T6_TRGO;
  72. DAC_INIT.DAC_WaveGeneration = DAC_WaveGeneration_None;
  73. DAC_INIT.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  74. DAC_Init(DAC_Channel_1, &DAC_INIT);
  75.  
  76. DMA_DeInit(DMA1_Stream5);
  77. DMA_INIT.DMA_Channel = DMA_Channel_7;
  78. DMA_INIT.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R1_ADDR;
  79. DMA_INIT.DMA_Memory0BaseAddr = (uint32_t)&function;
  80. DMA_INIT.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  81. DMA_INIT.DMA_BufferSize = SINE_RES;
  82. DMA_INIT.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  83. DMA_INIT.DMA_MemoryInc = DMA_MemoryInc_Enable;
  84. DMA_INIT.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  85. DMA_INIT.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  86. DMA_INIT.DMA_Mode = DMA_Mode_Circular;
  87. DMA_INIT.DMA_Priority = DMA_Priority_High;
  88. DMA_INIT.DMA_FIFOMode = DMA_FIFOMode_Disable;
  89. DMA_INIT.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  90. DMA_INIT.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  91. DMA_INIT.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  92. DMA_Init(DMA1_Stream5, &DMA_INIT);
  93.  
  94. DMA_Cmd(DMA1_Stream5, ENABLE);
  95. DAC_Cmd(DAC_Channel_1, ENABLE);
  96. DAC_DMACmd(DAC_Channel_1, ENABLE);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement