#include "stm32f4xx_gpio.h" #include "stm32f4xx.h" #include "stm32f4xx_usart.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_dac.h" //Задаем массив значений uint8_t data[10];//={200, 200, 200, 200, 200, 200, 200, 200, 200, 200}; uint8_t uart_data; //Переменная для цикла //Объявление функции инициализации периферии void InitPeriph(void); void usart_init(void); void GPIO_Init(); u8 readbyte(); u16 readShort(); int main() { InitPeriph(); //Вызываем функцию инициализации периферии usart_init(); for (uart_data=0; uart_data<10; uart_data++) { data[uart_data] = readbyte(); } while(1) //Бесконечный цикл формирования сигнала { for (uart_data=0; uart_data<10; uart_data++) { DAC->DHR8R2 = data[uart_data]; //Пишем в 8-разрядный регистр очередное значение массива DAC->SWTRIGR |= DAC_SWTRIGR_SWTRIG2; //Запуск преобразования } } } //Функция ининиализации периферии void InitPeriph(void) { GPIO_InitTypeDef gpio; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Mode = GPIO_Mode_AF; /* gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio); */ /* Configure USART Rx as alternate function */ gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Pin = GPIO_Pin_1; GPIO_Init(GPIOA, &gpio); /* Connect PXx to USARTx_Tx*/ // GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_UART4); /* Connect PXx to USARTx_Rx*/ GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_UART4); //Настройка порта А GPIOA->MODER |= GPIO_MODER_MODER5; //Аналоговый вход/выход линии PA5 GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR5; //Отключаем подтягивающие резисторы //Настройка цифро-аналогового преобразователя RCC->APB1ENR |= RCC_APB1ENR_DACEN; //Включаем тактирование DAC DAC->CR |= DAC_CR_EN2; //Включаем канал 2 DAC DAC->CR |= DAC_CR_BOFF2; //Использование выходного буфера DAC->CR |= DAC_CR_TEN2; //Разрешаем запуск преобразования в канале 2 DAC DAC->CR |= DAC_CR_TSEL2; //Выбираем источник запуска - программный } void usart_init(void) { USART_InitTypeDef usart; RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //RCC->APB1ENR|= RCC_APB1ENR_UART4EN; usart.USART_BaudRate =9600; usart.USART_WordLength = USART_WordLength_8b; usart.USART_StopBits = USART_StopBits_1; usart.USART_Parity = USART_Parity_No; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart.USART_Mode = USART_Mode_Rx;// | USART_Mode_Tx; /* USART configuration */ USART_Init(UART4, &usart); /* Enable UART */ USART_Cmd(UART4, ENABLE); /*Enable IRQ*/ NVIC_EnableIRQ (USART1_IRQn); UART4->CR1 |= USART_CR1_RXNEIE; } u16 readShort() { u16 ret; while(!(UART4->SR & USART_SR_RXNE)); ret = UART4->DR; (void) UART4->SR; ret<<=8; while(!(UART4->SR & USART_SR_RXNE)); ret += UART4->DR; (void) UART4->SR; return ret; } u8 readbyte() { u8 ret; while(!(UART4->SR & USART_SR_RXNE)); ret = UART4->DR; (void) UART4->SR; return ret; }