Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Массив, элементы которого нужно быстро запихивать в DAC чтоб получить синус */
- const uint16_t sin[32] = {
- 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
- 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
- 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};
- unsigned char i=0;
- int main(void) {
- /* Включаем порт А */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- /* Включаем ЦАП */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
- /* Включаем таймер 6 */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
- /* Настраиваем ногу ЦАПа */
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* Настраиваем таймер так чтоб он тикал почаще */
- TIM6->PSC = 0;
- TIM6->ARR = 500;
- TIM6->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
- TIM6->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
- NVIC_EnableIRQ(TIM6_DAC_IRQn); //Разрешение TIM6_DAC_IRQn прерывания
- /* Включить DAC1 */
- DAC->CR |= DAC_CR_EN1;
- /* Бесконечный цикл */
- while (1)
- {
- }
- }
- /*Обработчик прерывания от таймера 6 */
- void TIM6_DAC_IRQHandler(void) {
- TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
- DAC->DHR12R1=sin[i++]; //Запихиваем в ЦАП очередной элемент массива
- if (i==32) i=0; //Если вывели в ЦАП все 32 значения то начинаем заново
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement