Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. /* Массив, элементы которого нужно быстро запихивать в DAC чтоб получить синус */
  2. const uint16_t sin[32] = {
  3.  2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
  4.  3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
  5.  599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};
  6. unsigned char i=0;
  7.  
  8. int main(void) {
  9.   /* Включаем порт А */
  10.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  11.   /* Включаем ЦАП */
  12.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  13.   /* Включаем таймер 6 */
  14.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
  15.  
  16.   /* Настраиваем ногу ЦАПа */
  17.   GPIO_InitTypeDef GPIO_InitStructure;
  18.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  19.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  20.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  21.  
  22.   /* Настраиваем таймер так чтоб он тикал почаще */
  23.   TIM6->PSC = 0;
  24.   TIM6->ARR = 500;
  25.   TIM6->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
  26.   TIM6->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
  27.   NVIC_EnableIRQ(TIM6_DAC_IRQn); //Разрешение TIM6_DAC_IRQn прерывания
  28.  
  29.   /* Включить DAC1 */
  30.   DAC->CR |= DAC_CR_EN1;
  31.  
  32.   /* Бесконечный цикл */
  33.   while (1)
  34.   {
  35.   }
  36. }
  37.  
  38. /*Обработчик прерывания от таймера 6 */
  39. void TIM6_DAC_IRQHandler(void) {
  40.   TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
  41.   DAC->DHR12R1=sin[i++]; //Запихиваем в ЦАП очередной элемент массива
  42.   if (i==32) i=0; //Если вывели в ЦАП все 32 значения то начинаем заново
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement