реклама на сайте
подробности

 
 
> STM32L053 проблема с USART
Ешь
сообщение Nov 6 2015, 15:10
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 19-10-14
Пользователь №: 83 224



Всем привет!
Использую плату STM32L053 Discovery с контроллером STM32L053C8T6, и не могу запустить USART. Чтобы не пробовал USART "молчит". Сейчас использую вот такой код, который взял от сюда и модифицировал под свой контроллер.

CODE
#include "stm32l0xx.h" // Device header

void Init(void); //Объявление функции инициализации RCC, GPIO, USART
void Usart1_Transmit(uint8_t); //Объявление функции передачи символа через USART
void Usart1_Transmit_str(char* str); //Объявление функции передачи строки через USART


int main()
{
Init(); //Вызов функции инициализации
while(1)
{
Usart1_Transmit_str("STM32L-DISCOVERY"); //Вызов функции передачи строки через USART
for(uint32_t i=0; i<0x002FFFFF; i++); //Временная задержка
}
}

void Init()
{
//RCC
RCC->CR |= RCC_CR_HSION; //Включаем тактовый генератор HSI
while(!(RCC_CR_HSIRDY)); //Ждем его стабилизации
RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбираем источником тактовой частоты SYSCLK генератор HSI
RCC->CR &= ~RCC_CR_MSION; //Отключаем генератор MSI.

//GPIO
RCC->AHBENR |= RCC_IOPENR_GPIOAEN; //Включаем тактирование порта А
GPIOA->MODER |= GPIO_MODER_MODE9_1; //PA9 - выход AF
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_9; //PA9 - выход push-pull
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD9); //PA9 - без подтяжки
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEED9; //PA9 - скорость 40 МГц
/*Далее в разряды AFRH9[3:0] регистра альтернативных функций GPIOA_AFRH записываем
значение 0100, тем самым для вывода PA9 задаем значение
альтернативной функции - AF4, что соответствует USART1_TX*/
GPIOA->AFR[1] |= (0x4<<4);


//USART1
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //Включаем тактирование модуля USART1
USART1->CR1 |= USART_CR1_UE; //Включаем USART1
USART1->CR1 &= ~USART_CR1_M; //Длина слова - 8 бит
USART1->CR2 &= ~USART_CR2_STOP; //1 стоп-бит
USART1->BRR = 0x683; //baud rate 9600 при частоте HSI = 16 МГц
USART1->CR1 |= USART_CR1_TE; //Разрешаем передачу данных
}

//Функци передачи символа через USART
void Usart1_Transmit(uint8_t data)
{
while(!(USART1->ISR & USART_ISR_TC)); //Ждем установки флага TC - завершения передачи
USART1->TDR = data;
}

//Функция передачи строки через USART
void Usart1_Transmit_str(char* str)
{
uint8_t i=0;
while(str[i])
{
Usart1_Transmit(str[i]);
i++;
}
Usart1_Transmit('n');
Usart1_Transmit('r');
}


На компьютер пробовал передавать используя и FT232 и ST-LINK (оба чипа работают как USART-USB - проверял). Сам контроллер работает, диодами мигает, предустановленная демо-прошивка тоже нормально работала. Не работает ни USART1, ни USART2, пробовал на разных ногах, все время одно и тоже.

В чем может быть проблема? С STM32 раньше не работал, но документацию прочитал уже вдоль и поперек и вроде все правильно.

Сообщение отредактировал IgorKossak - Nov 6 2015, 19:08
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016