Dele 0 12 апреля, 2014 Опубликовано 12 апреля, 2014 (изменено) · Жалоба Добрый день! Неполучается уже второй день запустить USART на STM32L-DISCOVERY Среда Coocox Логическим анализатором смотрю нету ничего... РА 2Tx PA 3Rx КОД: #include "stm32l1xx_gpio.h" #include "stm32l1xx_rcc.h" #include "stm32l1xx.h" #include "misc.h" #include "stm32l1xx_usart.h" void Usart1_Transmit(uint8_t); //Объявление функции передачи символа через USART void Usart1_Transmit_str(char* str); //Объявление функции передачи строки через USART void usart(void); void RCC_Configuration(void) { SystemInit(); // Сброс по умолчанию GPIO_DeInit(GPIOA); GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOC); GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOE); RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIODEN, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE); } void init_led() { GPIO_InitTypeDef PORT; PORT.GPIO_Pin = (GPIO_Pin_7 | GPIO_Pin_6); PORT.GPIO_Mode = GPIO_Mode_OUT; PORT.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init( GPIOB , &PORT); } void init_but() { GPIO_InitTypeDef BUTA; BUTA.GPIO_Pin = GPIO_Pin_0; BUTA.GPIO_Mode = GPIO_Mode_IN; BUTA.GPIO_Mode = GPIO_PuPd_NOPULL; BUTA.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init( GPIOA , &BUTA); GPIO_InitTypeDef BUTD; BUTD.GPIO_Pin = GPIO_Pin_2; BUTD.GPIO_Mode = GPIO_Mode_IN; BUTD.GPIO_Mode = GPIO_PuPd_UP; BUTD.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init( GPIOD , &BUTD); } void usart() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //Включаем тактирование USART1 GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //Rx GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); //Tx GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_2); //Настройки будут производится для вывода PA2 TX GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //Выход Push-Pull GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_3); //Настройки будут производится для вывода PA3 //Rx GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //Режим альтернативной функции GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА //Инициализация USART1 USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate = 9600; //Скорость обмена 9600 бод USART_InitStruct.USART_WordLength = USART_WordLength_8b; //Длина слова 8 бит USART_InitStruct.USART_StopBits = USART_StopBits_1; //1 стоп-бит USART_InitStruct.USART_Parity = USART_Parity_No ; //Без проверки четности USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Без аппаратного контроля USART_InitStruct.USART_Mode = USART_Mode_Tx ; //Включен только передатчик USART1 USART_Init(USART2, &USART_InitStruct); //Заданные настройки сохраняем в регистрах USART1 USART_Cmd(USART2, ENABLE); //Включаем USART1 } void Usart1_Transmit(uint8_t data) { while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи USART2->DR = data; } void Usart1_Transmit_str(char* str) { uint8_t i=0; while(str[i]) { Usart1_Transmit(str[i]); i++; } Usart1_Transmit('n'); Usart1_Transmit('r'); } int main(void) { RCC_Configuration(); init_led(); init_but(); usart(); int i=0; while(1) { Usart1_Transmit_str('STM32L-DISCOVERY'); //Вызов функции передачи строки через USART for(i=0; i<1000; i++); //Временная задержка } } Изменено 13 апреля, 2014 пользователем Dele Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
garlands 0 12 апреля, 2014 Опубликовано 12 апреля, 2014 · Жалоба http://we.easyelectronics.ru/STM32/uart-us...m32l-stm32.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timma 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи USART1->DR = data; Ждете и настраиваете второго, пишите в первый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dele 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи USART1->DR = data; Ждете и настраиваете второго, пишите в первый. Поправил результат тот же, это я сначала первый пробовал думал там контакты LCD мешают, теперь так же со вторым пробую и так же... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexdos 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба не вижу включение тактирования альтернативных функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dele 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба не вижу включение тактирования альтернативных функций. В самом начале определил тактирование на все порты и Альт. функции в RCC_Configuration(void) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timma 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба Если USART настроен только на вывод, зачем подключать пин на ввод? Когда использовали USART1 подключали к APB1 или APB2? Попробуйте включить прерывания по TXE и TC, посмотреть будут ли срабатывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба В самом начале определил тактирование на все порты и Альт. функции в RCC_Configuration(void) надо не забывать, о правильном выставления делителя для первого usart-а. Он(и 6, если память не подводит) тактируется с другой шины чем 2,3 и т.д.. на приёмнике при этом приём идёт, но принимает крокозябрики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dele 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба Пробовал уже без пина на ввод РА3 так же. USART1 тактировал через APB2, USART2 соответственно через APB1, как описано в stm32l1xx_usart.h Я был бы рад кракозябрям, да и их то нету( А прерывания по USART настраивать это если только самому принимать данные, мне же надо только отправить... Вообщем заработало! Посмотрел дебагером, в функции Usart1_Transmit_str(char* str) на while(str) отправляет нас в startup_stm32l1xx_md.c а там в бесконечный цикл static void Default_Handler(void) { /* Go into an infinite loop. */ while (1) { } } Такие вот дела... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба ну нормальные дела, заглушка от не назначенной функции.... бесят меня библиотеки этим, если какая ошибка, они предпочитают повиснуть, нежели работать не верно. Для библиотеки это здорово, сразу видно что какие-то ошибки, но для остального проекта? Отвал одной функции, причем может быть второстепенной рубит весь проект... абалденно придумано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба Может, в HardFault улетает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба бесят меня библиотеки этим, если какая ошибка, они предпочитают повиснуть, нежели работать не верно. Для библиотеки это здорово, сразу видно что какие-то ошибки, но для остального проекта? Отвал одной функции, причем может быть второстепенной рубит весь проект... абалденно придумано... Что Вы так разоряетесь? Знаете-же рецепт? Не использовать чужой код... даже под пытками ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба Знаю, но чем дальше тем труднее противостоять экспансии... к примеру ТСР/IP стэк, как не крути а свой писать долго, и славы никакой, одна механика... а там тоже таких приколов хватает в драйверах конкретных процов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 13 апреля, 2014 Опубликовано 13 апреля, 2014 · Жалоба А я вот как раз сейчас в одном из проектов его и перепахиваю ;) Уже в нём нарвались ранее на баг, приводивший к зависанию соединения. Теперь вот больше не доверяю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dele 0 14 апреля, 2014 Опубликовано 14 апреля, 2014 (изменено) · Жалоба Планирую дальше организовать радиосвязь между двумя платами STM32DISCOVERY, модуль HOPE RFM22B, приемник выводит через UART в терминал то что пришло от передатчика... чувствую скоро еще тему создам) Изменено 14 апреля, 2014 пользователем Dele Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться