graf_vladislav 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 (изменено) · Жалоба Добрый день. С контроллерами STM особо не знаком... Пытаюсь запустить USART3 с пинов PD8 и PD9... Без использования готовых функций... Вот текст примитивной программы... Светодиоды работают, но внешний светодиод подключённый к PD8 вообще никак не мигает... В регистрах USART3 при отладке, содержимое регистра USART3->DR стабильно не меняется... Помогите пожалуйста, если что-то знаете, подскажите, в чём может быть причина... #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); } Изменено 23 ноября, 2012 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 · Жалоба Зачем open-drain для uart? GPIOD->AFR[1] |= (1<<1); - это что? точно не то, что в комменте написано. UART1-3 это AF7, и включать его надо на оба пина. Остальное не проверял, только что в глаза бросилось. Уж лучше STшную либу использовать, при все ее корявости, чем голые цифры в регистры писать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
graf_vladislav 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Да, действительно, просмотрел табличку альтернативных функций на страничке 190 REFERENCE MANUAL, там указано, что это альтернативная функция AF7...) А сразу, среди 1416 страниц не знаметил...) Спасибо за совет, очень помогло...) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться