|
STM32 uart как передать нулевой байт |
|
|
|
Dec 1 2014, 09:42
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-12-12
Пользователь №: 74 984

|
Вообщем вся тема в заголовке ) Вроде бы банально но не могу понять как UART заставить это сделать ... так как когда буфер пуст там 0x00, а я ему говорю еще записать 0x00 естественно он ничего не передает, какой флаг дернуть в принудительном порядке чтобы его заставить отослать нуль ?
|
|
|
|
|
Dec 1 2014, 09:53
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-12-12
Пользователь №: 74 984

|
Цитата(ViKo @ Dec 1 2014, 11:47)  UART не смотрит на то, что ему передали на выдачу. Ему важен сам процесс записи в него (в регистр DR). И тогда он не пуст. Факт остается фактом, при записи : while (!(MACHINES->SR & USART_FLAG_TXE)) os_dly_wait(1); MACHINES->DR = (ch & 0x01FF); return(ch); 0x00 в принятой посылке нуля нету ? Загадка не правда ли ?
|
|
|
|
|
Dec 1 2014, 10:11
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-12-12
Пользователь №: 74 984

|
Цитата(ViKo @ Dec 1 2014, 11:58)  Вы хотите сказать, что посылая длинное сообщение, вы принимаете его с пропущенными нулями? Не может такого быть. Что значит не может быть если я сейчас это наблюдаю, это объективная реальность моего текщего состояния ) Да посылая сообщение с нулями методом что я привел выше в приемной посылке нулей нету ... а если с помощью DMA то тогда все в проядке ) Но как сделать при записи в регистр чтобы передавался 0x00 ...
|
|
|
|
|
Dec 1 2014, 10:25
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-12-12
Пользователь №: 74 984

|
Цитата(ViKo @ Dec 1 2014, 12:18)  Просто вы их (0x00) не посылаете.  Программный косяк. Проверьте в отладчике. Или при приеме косяк программный. Что значит программный косяк если я записываю в регистр 0x0000а он не передается ? Какой тогда программый, это аппратный косяк, с DMA работает ! Нужно флаг для передачи установить какой-то, какой ?
|
|
|
|
|
Dec 1 2014, 10:56
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-12-12
Пользователь №: 74 984

|
Цитата(ViKo @ Dec 1 2014, 12:33)  Исходники - в студию!  CODE /******************************************************************************** ************* * RX from modem is comleted ******************************************************************************** *************/ void Machines_ReceiveData(void) { USART_ClearITPendingBit(MACHINES, USART_IT_RXNE); uint8_t data = MACHINES->DR; if(strlen((char *)machinesBuf) < MACHINES_BUFFER && strlen((char *)machinesBuf) < 5) { machinesBuf[strlen((char *)machinesBuf)] = data; } else if(strlen((char *)machinesBuf) >= 5) { machinesBuf[strlen((char *)machinesBuf)] = data; } else { memset((uint8_t *)machinesBuf,0,sizeof(uint8_t)*MACHINES_BUFFER); machinesBuf[0] = data; } }
/****************************************************************************** * TX string to ZigBee modem *******************************************************************************/ void Machines_SendStr(char *string, uint16_t len) { uint8_t i = 0; while(i < len) { Machines_SendData(string[i]); i++; } }
/******************************************************************************** ************* * TX char to ZigBee modem ******************************************************************************** *************/ unsigned short Machines_SendData(unsigned short ch) { while (!(MACHINES->SR & USART_FLAG_TXE)) os_dly_wait(1); if(ch != 0x00) MACHINES->DR = (ch & 0x01FF); else MACHINES->DR = 0x0000; return(ch); }
Я уже скидывал исходники и показывал
Сообщение отредактировал IgorKossak - Dec 2 2014, 19:35
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Dec 1 2014, 15:03
|
Участник

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

|
забей в бесконечный цикл совю функцию передачи и посмотри будет передача или нет Код while(1)Machines_SendData(0x00);
|
|
|
|
|
Dec 3 2014, 06:51
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(Dениs @ Dec 1 2014, 13:56)  ... Где вызов Machines_SendStr?
Сообщение отредактировал IgorKossak - Dec 4 2014, 16:21
Причина редактирования: избыточное цитирование
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|