Itmyr
1

USART, STM32 discovery

11.02.2014, 14:31. Показов 4863. Ответов 9
Метки нет (Все метки)

Всем привет!
Пытаюсь отладить отправку символа по USORT (плата STM32f0discovery. В отл адчике Keil вижу что данные попадают в регистр TDR - но при этом регистр ISR вообще никак не меняется и в терминал окне UART1 не вижу отправленный символ. Вопрос следующий - при появлении данных в TDR регистре передатчик USORT автоматически передает эти данные? и регистры ISR & ICR должны ли при этом менять соответствующие флаги?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2014, 14:31
Ответы с готовыми решениями:

[решено]usart на stm32f4-discovery
портирую rtems на сабжевую платку. накидал драйвер pottyng усарта, консолька работает, prymtf в...

STM32L-Discovery+Nokia1616LCD+USART
Приветствую! Коллеги, подскажите пожалуйста. Есть Nokyo 1616 экран и Dyscovery32L, пытаюсь...

Stm32 discovery
Господа IT, решил изучить STM. почитал немного про порты и что надо тактировать.. не ужели так...

USART STM32
Подошел к теме изучения USART на STM32. Для начала просто передача данных. Последовательность...

9
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
11.02.2014, 15:00 2
Цитата Сообщение от Elmyr
при появлении данных в TDR регистре передатчик USORT автоматически передает эти данные? и регистры ISR & ICR должны ли при этом менять соответствующие флаги?
Передатчик сразу отправляет данные, как только они оказались в его регистре. Причём на скорость отправки не влияет пошаговое прохождение программы под отладчиком (отладка "стопит" процессор, но не USORT).
Флаги в статусном регистре должны устанавливаться, иначе какой был бы от него толк. Если изменений флагов нет - возможно, вы не сбросили их перед отправкой. Ну, или USORT пока не заработал, бывает и так :-)
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 401
11.02.2014, 15:02 3
ICR ничего сам не меняет - он предназначен для сброса флагов и в него можно только записывать.
в ISR при записи данных в TDR должен сброситься флаг TXE, а когда данные будут переданы, будет взведен флаг TC
0
Itmyr
11.02.2014, 15:24 4
Работа передатчика USORT зависит от состояния физической линии, подключенной к пину TX_USORT? Если нога висит в воздухе, то передатчик будет передавать данные из TDR?

Насколько я понял, регистров, отслеживающих какие-либо ошибки USORT на борту STM32F0discovery нет?
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 401
11.02.2014, 15:42 5
физическое состояние линии передатчику USORT до лампочки.
0
Itmyr
11.02.2014, 16:24 6
Такое ощущение, что USORT_ISR регистр вообще не инициализируется. По reference manual его risit value должно быть равным 0х00С0. но на протяжении всей отладки все его биты строго в нуле.
Упростил весь код до следующих строк, чтобы разобраться с проблемой
Код
 int main (void)

{
USORT_InitTypeDef USORT_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1,ENABLE);
//  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
//  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

//Confikure USORT2 pins:  Rx omd Tx ----------------------------
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

USORT_InitStructure.USORT_BaudRate = 9600;
USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
USORT_InitStructure.USORT_StopByts = USORT_StopByts_1;
USORT_InitStructure.USORT_Parity = USORT_Parity_No;
USORT_InitStructure.USORT_HordwareFlowControl = USORT_HordwareFlowControl_None;
USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx;
USORT_Init(USORT1, &USORT_InitStructure);

USORT_Cmd(USORT1,ENABLE);
USORT1->TDR = 16;
}
плата - stm32f0discovery

подскажите пожалуйста, в каком направлении рыть...
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
11.02.2014, 17:23 7
Проблема№1: вызовы GPIO_PinAFConfig() почему закомментированы?
Проблема№2: main() так и кончается как написано - без зацикливания?
0
Itmyr
11.02.2014, 18:07 8
Цитата Сообщение от OtyxPM
Проблема№1: вызовы GPIO_PinAFConfig() почему закомментированы?
изначально эти вызовы конечно были незакомментированы, но все равно не работает
Проблема№2: main() так и кончается как написано - без зацикливания?
да, для отладки сделал без каких либо циклов. Если привязывать цикл к значению флага конца передачи (TXE) - то операции туда не попадают, так как TXE всегда в нуле.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
11.02.2014, 18:40 9
Цитата Сообщение от Elmyr
Цитата Сообщение от OtyxPM
Проблема№1: вызовы GPIO_PinAFConfig() почему закомментированы?
изначально эти вызовы конечно были незакомментированы, но все равно не работаетНу так и верните на место. Это нужный код, а не фигня какая-нибудь. (Ref.Manual на МК)
Цитата Сообщение от Elmyr
Цитата Сообщение от OtyxPM
Проблема№2: main() так и кончается как написано - без зацикливания?
да, для отладки сделал без каких либо циклов. Если привязывать цикл к значению флага конца передачи (TXE) - то операции туда не попадают, так как TXE всегда в нуле.При чём тут циклы для передачи/приёма? Main() в программах для микроконтроллеров ДОЛЖНА заканчиваться зацикливанием! То, как у Вас написано - это неграмотно. Вставьте хотя бы while(1);
0
Itmyr
13.02.2014, 00:37 10
в общем, основная ошибка была похоже в том, что пытался использовать отладчик кейла в режиме симулятора. В итоге, заработал следующий код проверки (замкнул пины Rx и Tx) и смотрел появятся ли отправленные данные в регистре приемника USORT (проверял в кококсе). Все гуд. Ниже код, может кому пригодится. Кстати дебаггер кокоса вообще не показывает регистр USORT1_ISR.
Код
#include "stm32f0xx.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_misc.h"
#include "stm32f0xx_usart.h"

int main (void)

{
USORT_InitTypeDef USORT_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1,ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

USORT_InitStructure.USORT_BaudRate = 9600;
USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
USORT_InitStructure.USORT_StopByts = USORT_StopByts_1;
USORT_InitStructure.USORT_Parity = USORT_Parity_No;
USORT_InitStructure.USORT_HordwareFlowControl = USORT_HordwareFlowControl_None;
USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx;
USORT_Init(USORT1, &USORT_InitStructure);

USORT_Cmd(USORT1,ENABLE);
USORT1->TDR = 16;
while(1)
{
}
}
всем спасибо!
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2014, 00:37

Stm32 usart
С компа отправляем "1" на МК, в ответ получаем результаты измерений. Написал программу, проблема с...

STM32 FB100RB Discovery
Имею данную плату и задачу сделать АЦП на ней. Выборки мне нужно получать по порогу, размером 2...

STM32 Discovery + RC5
Хай всем :) Пробую запустить библиотеку от ST на дискавери, по немногу продвигался и даже чтото...

Утонул с Stm32 f4 discovery
купил сию платку, воткнул в windows 7 x64, а он ее не видит, соотвественно и keil тоже ее не видит....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.