Перейти к содержанию

Msp430. Uart. Помогите Новичку


Рекомендуемые сообщения

Всем привет! Возник вопрос о том как осуществить передачу данных по UART.

#include "msp430.h"
/*
* main.c
*/
//const char string[] = { "Hello World\r\n" };
void initADC(void);
int tempOUT(void);
void initUART();

int main(void) {
int t ;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
initADC();
initUART();
//__bis_SR_register(CPUOFF + GIE);
while(1)
{
__delay_cycles(1000);//Сюда нужно передавать задержку переданную с компа
t = tempOUT();
__delay_cycles(1000);//...и сюда
}
return 0;
}
void initADC()
{
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON; // Включаем АЦП
ADC10CTL1=INCH_10+ ADC10DIV_3;//Канал с которого ведется преобразование 10(INCH_10)
	 //ADC10DIV_3- контролирует время разрешенное на преобразование
}
int tempOUT()
{
int T = 0;
int tmp = 0;
ADC10CTL0 |= ENC + ADC10SC; //Включаем преобразование когда ENC = 1
	 //Начинам преобразование, когда ADC10SC = 1
while(ADC10CTL1 & ADC10BUSY);
T = ADC10MEM;
ADC10CTL0&=~ENC;
tmp = (0.413 * T - 277.7 );
return(int)(tmp);
}
void initUART()
{
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSWRST;	 // Этот бит блокирует работу прерываний от UART и работу
						 // сдвигового регистра чтобы не мешать
						 // настройке (грубо говоря отключает UART).
UCA0CTL1 |= UCSSEL_2;	 // Наш UART будет работать от
						 // SMCLK (Sub-main clock), тоесть от 1MHZ.
UCA0BR0 = 0x03;		 // Делитель частоты для SMCLK (1000000 / 9600).
UCA0BR1 = 0x03;
UCA0MCTL = UCBRS1 + UCBRS0; // Модуляция UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Включаем UART обратно.
}
/*void UARTWriteString(char ch)
{
//тестовый посыл в uart-порт
int strSize = sizeof();
for(int i = 0; i < strSize; i++)
{
//WDTCTL = WDTPW + WDTCNTCL; // Сброс таймера watchdog в ноль.
while (!(IFG2&UCA0TXIFG))
; // Проверка готовности буфера отправки.
UCA0TXBUF = str[i];
}
}*/

Как инициализировать я разобрался. А вот как передать значение температуры догнать не могу. На хабре наткнулся на статью http://habrahabr.ru/post/137719/ .Там все просто для понимания, однако string в заголовках вроде бы не отвечает стандарту Си.

Нашел еще примеры с прерываниями, и реализация на таймере. И тут совсем запутался. Как все-таки осуществить прием и передачу данных? Какие тонкости? Заранее благодарю!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А что непонятно-то?

Сходу пару замечаний.

IE2 |= UCA0RXIE; // Включаем UART обратно.

Вот это совершенно ни к чему, т.к. прерывания ты всё равно не используешь.

Для передачи используй:

while (!(IFG2&UCA0TXIFG));
UCA0TXBUF = очередной байт данных;

Т.е. дожидаемся освобождения буфера передатчика и закидываем в него очередной байт данных. Можно засунуть в цикл и повторять сколько надо.

Принимать данные лучше в прерывании, но если без них...

while (!(IFG2&UCA0RXIFG));

Ждём установки флага прерывания. После этого читаем UCA0RXBUF - там принятый байт.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...