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

 
 
 
Reply to this topicStart new topic
> usart stm32l, Помогите разобраться
Dele
сообщение Apr 12 2014, 20:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898



Добрый день!
Неполучается уже второй день запустить USART на STM32L-DISCOVERY Среда Coocox
Логическим анализатором смотрю нету ничего...
РА 2Tx
PA 3Rx

КОД:
CODE
#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++); //Временная задержка
}

}


Сообщение отредактировал Dele - Apr 13 2014, 04:31
Go to the top of the page
 
+Quote Post
garlands
сообщение Apr 12 2014, 21:16
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 15-04-08
Из: UA
Пользователь №: 36 798



http://we.easyelectronics.ru/STM32/uart-us...m32l-stm32.html
Go to the top of the page
 
+Quote Post
Timma
сообщение Apr 13 2014, 02:29
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 26-11-07
Пользователь №: 32 693



while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи
USART1->DR = data;

Ждете и настраиваете второго, пишите в первый.
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 13 2014, 04:29
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898



Цитата(Timma @ Apr 13 2014, 06:29) *
while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи
USART1->DR = data;

Ждете и настраиваете второго, пишите в первый.

Поправил результат тот же, это я сначала первый пробовал думал там контакты LCD мешают, теперь так же со вторым пробую и так же...
Go to the top of the page
 
+Quote Post
alexdos
сообщение Apr 13 2014, 04:55
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



не вижу включение тактирования альтернативных функций.
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 13 2014, 04:57
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898



Цитата(alexdos @ Apr 13 2014, 08:55) *
не вижу включение тактирования альтернативных функций.

В самом начале определил тактирование на все порты и Альт. функции в RCC_Configuration(void)
Go to the top of the page
 
+Quote Post
Timma
сообщение Apr 13 2014, 05:13
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 26-11-07
Пользователь №: 32 693



Если USART настроен только на вывод, зачем подключать пин на ввод?
Когда использовали USART1 подключали к APB1 или APB2?
Попробуйте включить прерывания по TXE и TC, посмотреть будут ли срабатывать.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 13 2014, 07:56
Сообщение #8


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Dele @ Apr 13 2014, 08:57) *
В самом начале определил тактирование на все порты и Альт. функции в RCC_Configuration(void)


надо не забывать, о правильном выставления делителя для первого usart-а. Он(и 6, если память не подводит) тактируется с другой шины чем 2,3 и т.д..
на приёмнике при этом приём идёт, но принимает крокозябрики.
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 13 2014, 10:32
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898



Пробовал уже без пина на ввод РА3 так же.
USART1 тактировал через APB2, USART2 соответственно через APB1, как описано в stm32l1xx_usart.h
Я был бы рад кракозябрям, да и их то нету(

А прерывания по USART настраивать это если только самому принимать данные, мне же надо только отправить...

Вообщем заработало!
Посмотрел дебагером, в функции Usart1_Transmit_str(char* str) на while(str[i]) отправляет нас в startup_stm32l1xx_md.c а там в бесконечный цикл

static void Default_Handler(void)
{
/* Go into an infinite loop. */
while (1)
{ }
}
Такие вот дела...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 13 2014, 13:13
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну нормальные дела, заглушка от не назначенной функции....
бесят меня библиотеки этим, если какая ошибка, они предпочитают повиснуть, нежели работать не верно. Для библиотеки это здорово, сразу видно что какие-то ошибки, но для остального проекта? Отвал одной функции, причем может быть второстепенной рубит весь проект... абалденно придумано...
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 13 2014, 13:20
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Может, в HardFault улетает?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 13 2014, 15:05
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Golikov A. @ Apr 13 2014, 19:13) *
бесят меня библиотеки этим, если какая ошибка, они предпочитают повиснуть, нежели работать не верно. Для библиотеки это здорово, сразу видно что какие-то ошибки, но для остального проекта? Отвал одной функции, причем может быть второстепенной рубит весь проект... абалденно придумано...

Что Вы так разоряетесь? Знаете-же рецепт? Не использовать чужой код... даже под пытками wink.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 13 2014, 15:15
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Знаю, но чем дальше тем труднее противостоять экспансии... к примеру ТСР/IP стэк, как не крути а свой писать долго, и славы никакой, одна механика... а там тоже таких приколов хватает в драйверах конкретных процов...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 13 2014, 15:18
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



А я вот как раз сейчас в одном из проектов его и перепахиваю wink.gif
Уже в нём нарвались ранее на баг, приводивший к зависанию соединения. Теперь вот больше не доверяю.
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 14 2014, 07:47
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898



Планирую дальше организовать радиосвязь между двумя платами STM32DISCOVERY, модуль HOPE RFM22B, приемник выводит через UART в терминал то что пришло от передатчика... чувствую скоро еще тему создам)

Сообщение отредактировал Dele - Apr 14 2014, 07:49
Go to the top of the page
 
+Quote Post

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

 


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


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