Пытаюсь запустить USART3 с пинов PD8 и PD9... Без использования готовых функций...
Вот текст примитивной программы... Светодиоды работают, но внешний светодиод подключённый к PD8 вообще никак не мигает...
В регистрах USART3 при отладке, содержимое регистра USART3->DR стабильно не меняется... Помогите пожалуйста, если что-то знаете, подскажите, в чём может быть причина...
CODE
#include "stm32f4xx.h"
#include "system_stm32f4xx.h"
/* Include variables */
unsigned long int i = 0x00000000;
/* Main program text*/
int main(void)
{
/* Set clock mode */
RCC->CFGR |= (1<<0); // set HSE clock
RCC->AHB1ENR |= (1<<3); // port D clock enable
RCC->APB1ENR |= (1<<18); // enable clock USART3
/* Set I/O mode */
GPIOD->MODER = 0x555A5555; // port D OUT PD8 and PD9 how to alternative function
GPIOD->OTYPER |= (1<<9); // open-drain mode for PD9_RX
GPIOD->OSPEEDR = 0x555A5555; // 50 MHz speed PD8 and PD9
GPIOD->PUPDR = 0x00000000; // no pull-up/pull-down
GPIOD->AFR[1] |= (1<<1); // PD9 how to alternative function TX
GPIOD->ODR |= (1<<5); // pull-up PD5
/* USART3 configuration set */
USART3->BRR = 0x0341; // usart3 speed 9600
USART3->CR1 |= (1<<13); // usart3 enable
USART3->CR1 |= (1<<3); // usart3 TX enable
/* Program for indication */
ind:
USART3->DR = 0xFA;
for(;((USART3->SR & USART_SR_TC) == 0)
{
}
USART3->SR &= ~USART_SR_TC;
GPIOD->ODR |= ((1<<12) | (1<<14));
for(i=0;i<1000000;i++)
{
}
GPIOD->ODR &= ~((1<<12) | (1<<14));
GPIOD->ODR |= ((1<<13) | (1<<15));
for(i=0;i<1000000;i++)
{
}
GPIOD->ODR &= ~((1<<13) | (1<<15));
goto ind;
return(0);
}
#include "system_stm32f4xx.h"
/* Include variables */
unsigned long int i = 0x00000000;
/* Main program text*/
int main(void)
{
/* Set clock mode */
RCC->CFGR |= (1<<0); // set HSE clock
RCC->AHB1ENR |= (1<<3); // port D clock enable
RCC->APB1ENR |= (1<<18); // enable clock USART3
/* Set I/O mode */
GPIOD->MODER = 0x555A5555; // port D OUT PD8 and PD9 how to alternative function
GPIOD->OTYPER |= (1<<9); // open-drain mode for PD9_RX
GPIOD->OSPEEDR = 0x555A5555; // 50 MHz speed PD8 and PD9
GPIOD->PUPDR = 0x00000000; // no pull-up/pull-down
GPIOD->AFR[1] |= (1<<1); // PD9 how to alternative function TX
GPIOD->ODR |= (1<<5); // pull-up PD5
/* USART3 configuration set */
USART3->BRR = 0x0341; // usart3 speed 9600
USART3->CR1 |= (1<<13); // usart3 enable
USART3->CR1 |= (1<<3); // usart3 TX enable
/* Program for indication */
ind:
USART3->DR = 0xFA;
for(;((USART3->SR & USART_SR_TC) == 0)

{
}
USART3->SR &= ~USART_SR_TC;
GPIOD->ODR |= ((1<<12) | (1<<14));
for(i=0;i<1000000;i++)
{
}
GPIOD->ODR &= ~((1<<12) | (1<<14));
GPIOD->ODR |= ((1<<13) | (1<<15));
for(i=0;i<1000000;i++)
{
}
GPIOD->ODR &= ~((1<<13) | (1<<15));
goto ind;
return(0);
}