22.11.2010, 01:15
|
|
Временная регистрация
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от nekolex
|
как передавать данные по uart на com порт
|
Странный вопрос. Если вы имеете в виде последовательный порт ПК, то между микроконтроллером и этим последовательным портом должна быть микросхема драйвера RS232 (например, max3232). Если вас интересует пример кода передачи данных по уарт, то вроде на сайте NXP он имеется.
|
|
|
|
22.11.2010, 01:19
|
|
Частый гость
Регистрация: 24.03.2010
Сообщений: 25
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Цитата:
|
на сайте NXP он имеется
|
ссылочкой не поделитесь?)
|
|
|
|
22.11.2010, 02:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
|
|
|
|
22.11.2010, 10:37
|
|
Временная регистрация
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Жаль нельзя прикрепить пост со всеми ссылками на всякие примеры кодов, а то постоянно одни и те же вопросы, а простым поиском по теме народ просто отказывается воспользоваться. Может сделать отдельную тему и попросить модераторов прикрепить ее?
|
|
|
|
22.11.2010, 15:01
|
|
Частый гость
Регистрация: 24.03.2010
Сообщений: 25
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Могли бы вы прокомментировать код:
Код:
|
#include "LPC11xx.h"
#include "uart.h"
extern volatile uint32_t UARTCount;
extern volatile uint8_t UARTBuffer[BUFSIZE];
int main (void) {
/* Basic chip initialization is taken care of in SystemInit() called
* from the startup code. SystemInit() and chip settings are defined
* in the CMSIS system_‹part family›.c file.
*/
/* NVIC is installed inside UARTInit file. */
UARTInit(115200);
while (1) /* Loop forever */
{
if ( UARTCount != 0 ) /*Здесь не понятно, для чего
UARTCount?*/
{
/* Disable RBR -отключается прием*/
LPC_UART-›IER = IER_THRE | IER_RLS;
/*UARTBuffer имеет тип uint8_t,
так как же передавать текст?
И что он передает в данном случае?*/
UARTSend( (uint8_t *)UARTBuffer, UARTCount );
UARTCount = 0;
/* Re-enable RBR -включаем прием*/
LPC_UART-›IER = IER_THRE | IER_RLS | IER_RBR;
}
}
}
/************Ниже код из uart.c***************/
void UARTSend(uint8_t *BufferPtr, uint32_t Length)
{
while ( Length != 0 )
{
/* THRE status, contain valid data */
#if !TX_INTERRUPT
while ( !(LPC_UART-›LSR & LSR_THRE) );
LPC_UART-›THR = *BufferPtr;
#else
/* Below flag is set inside the interrupt handler when THRE occurs. */
while ( !(UARTTxEmpty & 0x01) );
LPC_UART-›THR = *BufferPtr;
UARTTxEmpty = 0; /* not empty in the THR until it shifts out */
#endif
BufferPtr++;
Length--;
}
return;
}
/*************************************/ |
Последний раз редактировалось nekolex; 22.11.2010 в 15:03.
|
|
|
|
22.11.2010, 16:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от nekolex
|
Могли бы вы прокомментировать код
|
Это высосанный из пальца пример. Он вовсе не обязан быть логичным.
UARTCount - счетчик принятых данных. Если он не равен 0, значит что то пришло.
По логике примера это "что то" нужно отправить обратно, причем во время отправки не принимать другие данные. Видимо сделано для возможности простой адаптации под RS485. Не забывайте - это пример, причем в основном просто для тестирования железа. Не нравится - напишите нормальный драйвер на основе предложенного производителем, с кольцевым буфером и разбором своего протокола.
Работа с железом показана в примере, а логика работы Вашего устройства известна только Вам.
|
|
|
|
22.11.2010, 18:43
|
|
Частый гость
Регистрация: 24.03.2010
Сообщений: 25
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сваял такой код, оцените пожалуйста:
Код:
|
#include "LPC11xx.h"
#include "stdio.h"
#include "uart.h"
/************************************************** ******/
/************************* MAIN **************************/
int main(void)
{
UARTInit(9600);
char str[20];
while(1){
str[20]=UARTGet();
UARTSend(str[20]);
}
}
/*******************End of MAIN.C*************************/
/***********Функции для отправки и приема (UART.C)***********/
/***************Функция для отправки строки****************/
void UARTSend(char *c)
{
int i;
i=0;
/* Keep Transmitting until Null character('\0') is reached */
while(c[i])
{
LPC_UART-›THR=c[i];
i++;
}
LPC_UART-›THR=LINE_FEED;
LPC_UART-›THR=CARRIAGE_RET;
/* Wait till U0THR and U0TSR are both empty */
while(!(LPC_UART-›LSR & TEMT)){}
}
/***************Функция для приема строки******************/
/*проблема гдето здесь, вместо строки
отправляет странные символы, либо пустые строки*/
char UARTGet()
{
int i;
char rxData[20];
i=0;
while(!(LPC_UART-›LSR & LSR_RDR)){
rxData[i] = LPC_UART-›RBR;
i++;
}
return rxData[20];
} |
Суть в том что контроллер должен считать инф-ю с com порта и отправить ее обратно.
Последний раз редактировалось nekolex; 22.11.2010 в 19:16.
|
|
|
|
22.11.2010, 23:58
|
|
Временная регистрация
Регистрация: 26.09.2009
Сообщений: 81
Сказал спасибо: 4
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
nekolex,
int main(void)
{
UARTInit(9600);
char str[20];
while(1){
str[20]=UARTGet();
UARTSend(str[20]);
}
}
Дальше можно не смотреть?
|
|
|
|
23.11.2010, 01:45
|
|
Вид на жительство
Регистрация: 30.07.2009
Адрес: SPb, RU
Сообщений: 382
Сказал спасибо: 81
Сказали Спасибо 119 раз(а) в 92 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от nekolex
|
str[20]=UARTGet();
|
Раскрывая ответ espectr0, Вы считываете в память за пределами выделенного буфера, и хотите вывести данные обратно? ARM тут точно не при чём...
|
|
|
|
23.11.2010, 10:25
|
|
Частый гость
Регистрация: 24.03.2010
Сообщений: 25
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Код:
|
int main(void)
{
UARTInit(9600);
char str[20];
while(1){
*str=UARTGet();
UARTSend(*str);
}
} |
Если так?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:39.
|
|