Код инициализации:
Код: Выделить всё
//Выше по коду включен тактирование порта А
void ADC1_Init(void) {
SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN); //Настроили тактирование PORT A
//свой код
}
void USART1_Init(void) {
// USART1: Rx - PA10 , Tx - PA9
// PA9 (TxD)
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER9_Msk, 0b10 << GPIO_MODER_MODER9_Pos); // (10) режим альтернативной функции
CLEAR_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT_9); //(0) двухтактный выход или push-pull сокращено PP
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR9_Msk, 0b01 << GPIO_PUPDR_PUPDR9_Pos); // (01) подтяжка к плюсу питания или pull-up сокращено PU
MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDER_OSPEEDR9_Msk, 0b11 << GPIO_OSPEEDER_OSPEEDR9_Pos); //(11) 50 MHz, высокочастотный выход
MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFRH1_Msk, 0b0111 << GPIO_AFRH_AFRH1_Pos); // 7 << (1 * 4)
// PA10 (RxD)
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER10_Msk, 0b10 << GPIO_MODER_MODER10_Pos); // (10) режим альтернативной функции
CLEAR_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT_10); //(0) двухтактный выход или push-pull сокращено PP
MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDER_OSPEEDR10_Msk, 0b11 << GPIO_OSPEEDER_OSPEEDR10_Pos); //(11) 50 MHz, высокочастотный выход
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR10_Msk, 0b00 << GPIO_PUPDR_PUPDR10_Pos); //(00) состояние после сброса, no pull up, pull down
MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFRH2_Msk, 0b0111 << GPIO_AFRH_AFRH2_Pos); // 7 << (2 * 4)
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN); //Запустим тактирование USART1
USART1->BRR = 0xEA6; //19200
CLEAR_BIT(USART1->CR1, USART_CR1_OVER8); //0: Передискретизация равна 16
SET_BIT(USART1->CR1, USART_CR1_UE); //(1)USART включить
MODIFY_REG(USART1->CR1, USART_CR1_M_Msk, 0b00 << USART_CR1_M_Pos); //(00) Word lenght 1 Start bit, 8 Data bits, n Stop bit
SET_BIT(USART1->CR1, USART_CR1_RE); //(1) Влючить приемник Rx
SET_BIT(USART1->CR1, USART_CR1_TE); //(1) Включить передатчик Tx
SET_BIT(USART1->CR1, USART_CR1_RXNEIE); //(1) Прерывание по приему данных включено
SET_BIT(USART1->CR1, USART_CR1_IDLEIE); //(1) Прерывание по флагу IDLE включено
USART1->CR2 = 0;
CLEAR_BIT(USART1->CR2, USART_CR2_STOP); //1 стоп бит
USART1->CR3 = 0;
USART1->GTPR = 0;
USART1->ICR = 0;
NVIC_EnableIRQ(USART1_IRQn);
}Код: Выделить всё
// PA10 (RxD) shall use the alternate function 7 (see data sheet)
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER10_Msk, 0b00 << GPIO_MODER_MODER10_Pos); //(00) вход