Начинаем кодить.
usart1.c
Функция Usart1_Init
Код:
|
RCC-›APB2ENR |= RCC_APB2ENR_USART1EN; //USART clock
RCC-›AHB1ENR |=RCC_AHB1ENR_GPIOBEN; //GPIOB clock |
Включаем тактирование USART и PORTB
Код:
|
GPIOB-›AFR[0] |= (7‹‹28)|(7‹‹24); // AF7 for PB6 & PB7 |
Включаем AF для PB и PB7 здесь надо подробней.
Как выше писал пины
USART1 висят на PB6 и PB7 альтернативной функцией
AF7.
Смотрим в таблицу описания регистра GPIOx_AFRL . рис 1. и рис2.
Для того что бы выбрать альтернативную функцию для пина нужно занести значение AFx в
тетрады AFRLx и AFRHx где x номер пина .
Каждой AFx соответствует тетрада см. рис 2.
Наша
В хедере регистры регистры GPIOx_AFRx описаны как массив AFR[2] .
В итоге нам нужно занести в AFR[0] (он же AFRL) в AFRL7 и AFRL6 значение 7.
Код:
|
GPIOB-›MODER &=~
GPIO_MODER_MODER6 |
GPIO_MODER_MODER7
;
GPIOB-›MODER|=
GPIO_MODER_MODER6_1|
GPIO_MODER_MODER7_1
;
GPIOB-›OSPEEDR|=
GPIO_OSPEEDER_OSPEEDR6|
GPIO_OSPEEDER_OSPEEDR7
; |
Конфигурируем пины PB6 и PB7 - позже ширше...
Смотрим Reference manual. рис3.
Нам нужно для наших пинов выбрать режим AF. (10 бинарное).
То есть занести это значение, в соответствующие номерам пинов, разряды регистра
GPIOx_MODER.
Что мы и делаем, сначала обнуляем оба бита а затем ставим старшие биты каждой пары.
Далее работаем с OSPEEDR , тупо заносим в каждую пару 11 бинарное, что соответствует максимальной скорости порта.рис 4
(Что кстати счас и на не нужно)
Код:
|
// set baudrate(APBclk+baudrate/2)/baudrate;
USART1-›BRR =(APB2CLK+BAUDRATE/2)/BAUDRATE; |
Выставляем скорость USART.
Код:
|
// Transmitter & Receiver-Enable, 8 Data Bits, 1 Stop Bit
USART1-›CR1 = USART_CR1_TE | USART_CR1_RE;
USART1-›CR2 = 0;
USART1-›CR3 = 0;
USART1-›CR1 |= USART_CR1_UE; // Uart Enable |
Конфигурируем и включаем.
Код:
|
void Usart1_send(char data)
{
while (!(USART1-›SR & USART_SR_TXE)) {};
// wait until the data register becomes empty
USART1-›DR = data;
} |
В usart1.h добавляем
Код:
|
#define APB2CLK 84000000UL
#define BAUDRATE 115200UL |
И в main.c
Код:
|
int main(void) {
SysTick_Config(SystemCoreClock / 1000);
Usart1_Init();
while (1)
{
Usart1_send('A');
Delay_mS(200);
}
} |
Компилируем , подключаем через UART-USB . Запускаем Putty на 115000
И радуемся..
Вечером отредактирую .