PIC 32 ТТЛ-связь

Мне дали PIC32mx795f512L для того, чтобы построить шпион для I2C, я буду подключать 3 провода на SDA, SCL и GND, а затем я должен обнаружить отправленные данные. Эта часть в порядке. Теперь, когда у меня есть данные, я должен отправить их через RX, TX на компьютер (фактически я отправляю их на адаптер, который преобразует их в RS232), и вот моя проблема.

Я действительно не знаю, как инициализировать это общение. Пока ставлю:

mPORTFClearBits(BIT_8);
TRISFbits.TRISF8=0;        // RF8 output==>TX1
TRISFbits.TRISF2=1;        // RF1 input==>RX1
U1STA = 0x1400; // Enable Tx(inv) and Rx
U1BRG = 8332; // value = (80000000 / BAUD) - 1 = 9600
U1MODE = 0x8008; // Enable UART with 1 stop bit, no parity and BRGH
OpenUART1(UART_EN | UART_BRGH_FOUR, UART_RX_ENABLE | UART_TX_ENABLE, UBRG(UART1_BAUD));

Проверив лист данных, я на самом деле не знаю, настроено ли все необходимое. И тем не менее, я не понимаю, как отправлять данные через TX. Я нашел эту тему, где говорится:

Чтобы сделать некоторый вывод char (a - в этом примере) на UART, просто напишите этот код:

   if(!BusyUART1()) 
   putsUART1("-\r\n"); "

Но я не могу найти, где используется "а".

Поэтому, пожалуйста, если кто-то чувствует себя в состоянии помочь мне, не стесняйтесь делать это.


person DesireM    schedule 03.07.2015    source источник
comment
Это (- в этом примере) .. он должен отправить знак минус (за которым следует CR LF).   -  person TripeHound    schedule 03.07.2015
comment
Спасибо, чувак, это было так очевидно, но я не мог этого увидеть.. ^^   -  person DesireM    schedule 06.07.2015


Ответы (2)


В основном следующие вещи важны при настройке UART связи

  • UART скорость передачи
  • Инициализация контакта UART (TRIS бит в PIC)
  • Сколько бит данных (7 или 8)
  • Сколько стоповых битов (1, 1,5 или 2)
  • Четность (нет, нечетность или четность)

Я вижу все эти вещи, инициализированные в вашем коде, которые все необходимы. Итак, это ответ на ваш первый вопрос.

Для вашего второго вопроса проверяется UART бит занятости и знак минус '-', за которым следует CRLF, отправляется по UART Tx

person Samurai Jack    schedule 03.07.2015
comment
Прежде всего, спасибо за ваш ответ, ребята. Итак, все готово для отправки данных? Боже мой, ты прав... так глупо =D Я пытался поместить переменную в минус, например, для printf, добавив %d : putsUART1("%d\r\n",var);, но это не работает. Возможно ли это сделать или мне нужно добавить определенный номер и переписать функцию, когда я хочу изменить этот номер? Спасибо - person DesireM; 06.07.2015
comment
@DesireM: вы можете использовать метод itoa, а затем преобразованный буфер значений Ascii отправить через UART. - person Samurai Jack; 06.07.2015
comment
@DesireM: Пожалуйста, проголосуйте или примите ответ, если ваша проблема решена, чтобы он был полезен для других, столкнувшихся с той же проблемой. - person Samurai Jack; 06.07.2015
comment
Не могу сказать, что ваш ответ был полезен. Я могу, но это пока не считается. это говорит мне это: Спасибо за отзыв! Как только вы заработаете в общей сложности 15 очков репутации, ваши голоса изменят общедоступный рейтинг публикации. - person DesireM; 06.07.2015
comment
Но, сделав это:' if(!BusyUART1()) { putsUART1(0\r\n); }' Я пишу на TX? Потому что я ничего не вижу с осциллографом - person DesireM; 06.07.2015
comment
Ваши линии UART Rx и Tx показывают высокий уровень на осциллографе? Когда вы настраиваете контакты PIC для UART, эти контакты должны быть высокими. - person Samurai Jack; 06.07.2015
comment
Tx высокий, но Rx низкий - person DesireM; 06.07.2015
comment
Если Rx низкий, и вы включили прерывание приема, то контроллер будет получать непрерывное прерывание, что приведет к зависанию контроллера. Пожалуйста, проверьте ваши аппаратные соединения, оба должны быть высокими - person Samurai Jack; 06.07.2015
comment
Rx по-прежнему низкий:/ но мое другое прерывание (ChangeNotfice) работает хорошо. И кажется, что все работает хорошо, за исключением того, что этот RX остается низким. - person DesireM; 06.07.2015
comment
Возможно, эта строка неверна U1STA = 0x1400; // Enable Tx(inv) and Rx Она может включать только TX1 и что-то еще, но я не могу сказать, что хочу настроить RX1. - person DesireM; 06.07.2015

Выполните следующие действия, чтобы настроить передачу UART:

  1. Инициализируйте регистр UxBRG для соответствующей скорости передачи (см. 21.3 «Генератор скорости передачи UART»).

  2. Установите количество битов данных и стоповых битов, а также выбор четности путем записи в биты PDSEL‹1:0> (UxMODE‹2:1>) и бит STSEL (UxMODE‹0>).

  3. Если желательны прерывания передачи, установите бит управления UxTXIE в соответствующем регистре управления разрешением прерываний (IEC). Укажите приоритет прерывания и субприоритет для прерывания передачи, используя управляющие биты UxIP‹2:0> и UxIS‹1:0> в соответствующем регистре управления приоритетом прерывания (IPC). Кроме того, выберите режим прерывания передачи, записав биты UTXISEL (UxSTA‹15:14>).
  4. Включите передачу, установив бит UTXEN (UxSTA‹10>), который также устанавливает бит UxTXIF. Бит UxTXIF должен быть очищен в программной процедуре, которая обслуживает прерывание передачи UART. Работа бита UxTXIF контролируется управляющими битами UTXISEL.
  5. Включите модуль UART, установив бит ON (UxMODE‹15>).
  6. Загрузить данные в регистр UxTXREG (начать передачу)

Для настройки приема UART выполняются следующие шаги:

  1. Инициализируйте регистр UxBRG для соответствующей скорости передачи (см. 21.3 «Генератор скорости передачи UART»).
  2. Установите количество битов данных и стоповых битов, а также выбор четности, записав в биты PDSEL‹1:0> (UxMODE‹2:1>) и STSEL (UxMODE‹0>).
  3. Если желательны прерывания, установите бит UxRXIE в соответствующем регистре управления разрешением прерываний (IEC). Укажите приоритет и подприоритет для прерывания, используя управляющие биты UxIP‹2:0> и UxIS‹1:0> в соответствующем регистре управления приоритетом прерывания (IPC). Также выберите режим прерывания по приему, записав в биты URXISEL‹1:0> (UxSTA‹7:6>).
  4. Включите приемник UART, установив бит URXEN (UxSTA‹12>).
  5. Включите модуль UART, установив бит ON (UxMODE‹15>).
  6. Прерывания по приему зависят от настроек бита URXISEL‹1:0>. Если прерывания приема не разрешены, пользователь может опросить бит URXDA (UxSTA‹0>). Бит UxRXIF должен быть очищен в программной процедуре, которая обслуживает прерывание приема UART.
  7. Чтение данных из приемного буфера. Если выбрана 9-битная передача, прочитать слово; в противном случае прочитать байт. Бит URXDA устанавливается всякий раз, когда данные доступны в буфере.
person DesireM    schedule 07.07.2015