|
UART2 на STM32F100C4 сплошные глюки :') |
|
|
|
Aug 28 2012, 07:50
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870

|
Не могу понять в чём дело.. процессор STM32F100C4 инициализирую при помощи файла STM32_Init.c пытаюсь принять и передать байты по прерываниям... принимать удаётся, только все принятые данные почему то смещены на 0х80 т.е. если передается 1 то принимаю 129 (0х81) 2 то принимаю 130 (0х82) и Т.Д. а вот передать через прерывание вообще не получается... точнее .. если не через прерывания, то байт передаётся.. правда данные искажены.. если ставлю галочку в мастере TXE Interrupt Enable , по вообще всё виснет помогите разобраться инициализирую теперь так: Код void USART_configuration(void) { //Включение тактирования RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //Тактирование GPIO RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; //Тактирование альтернативных функций GPIO RCC->APB1ENR |= RCC_APB1ENR_USART2EN; //Тактирование USART2 //Конфигурирование PORTA.2 для TX; PORTA.3 для RX GPIOA->CRL &= ~(0xFFUL << 8); // Clear PA2, PA3 GPIOA->CRL |= (0x0BUL << 8); // USART2 Tx (PA2) alternate output push-pull GPIOA->CRL |= (0x04UL << 12); // USART2 Rx (PA3) input floating //Задание режима работы USART2->BRR = 0x0341; //Cкорость обмена 9600 бод USART2->CR1 &= ~USART_CR1_M; //8 бит данных USART2->CR2 &= ~USART_CR2_STOP; //Предочистка числа стоп-битов USART2->CR2 |= USART_CR2_STOP_0; //Количество стоп-битов: 2 //Управление работой USART2->CR1 |= USART_CR1_UE; //Включение модуля USART2 USART2->CR1 |= USART_CR1_TE; //Включение передатчика USART2->CR1 |= USART_CR1_RE; //Включение приемника //Разрешить прерывания //NVIC_EnableIRQ (USART2_IRQn); //Прерывания USART2 // USART2->CR1 |= USART_CR1_TCIE; //Прерывание по завершении передачи USART2->CR1 |= USART_CR1_RXNEIE; //Прерывание по завершении приема NVIC->ISER[1] = (1 << (USART2_IRQn & 0x1F)); // enable interrupt
USART_ITConfig(USART2, USART_IT_TC, DISABLE); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); прерывание Код void USART2_IRQHandler(void) { volatile unsigned int IIR; IIR = USART2->SR;
if(IIR & USART_IT_RXNE) { USART2->SR &= ~USART_IT_RXNE; // clear interrupt if(usart2.rxcnt>(BUF_SZ-2)) usart2.rxcnt=0; usart2.buffer[usart2.rxcnt++] = USART_ReceiveData (USART2);
usart2.delay=0; if(usart2.rxcnt>7)usart2.rxgap=1; // принял всю посылку } ф-я маin Код stm32_Init (); // STM32 setup USART_configuration(); while (1) { if(usart2.rxgap==1) { // if (usart2.buffer[0]==129) // { GPIOB->BSRR = GPIO_Pin_1; // передача // rx_Data=usart2.buffer[1];
//USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); // USART_ITConfig(USART2, USART_IT_TC, ENABLE); Delay(100); USART_SendData(USART2, 1);
usart2.rxcnt=0; usart2.rxtimer=0; usart2.delay=0; usart2.rxgap=0; GPIOB->BRR = GPIO_Pin_1; } приём остался таким же 1 то принимаю 129 (0х81) 2 то принимаю 130 (0х82) и Т.Д. а при передаче байта отправляется мусор !!! и тоже если в конфигурации разрешить USART2->CR1 |= USART_CR1_TCIE; //Прерывание по завершении передачи то уже ничего не принимает ... похоже висит. посоветуйте, что проверить? как ещё настроить? осциллографом смотрел, битики при передаче бегут  до ST485 доходят
|
|
|
|
|
 |
Ответов
|
Aug 29 2012, 05:28
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870

|
Ну что же помоему до меня дошло я тактирую от внутреннего генератора 8 МГц. похоже отсуда и все глюки!!! как считает общественность? у меня стоит на макетке 32кГц внешний кварц Можно ли им обойтись?
|
|
|
|
|
Aug 29 2012, 08:32
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870

|
Цитата(scifi @ Aug 29 2012, 08:42)  Тактирую от него же, глюков нет. Цитата(scifi @ Aug 29 2012, 08:42)  Кстати, это несложно проверить осциллографом: измерьте частоту следования битов. ... хорошо измерю ... Цитата(spectral1989 @ Aug 29 2012, 09:03)  какой терминал и все ли там правильно стоит? baudrate, stop bits, data bits, parity .. Терминал проверенный и стоит там всё правильно! неужели проблема в железе ... может у кого найдётся рабочий пример UARTа на stm32F100C4 ? не важно на прерываниях или без ..
Сообщение отредактировал Bob176 - Aug 29 2012, 08:35
|
|
|
|
|
Aug 29 2012, 11:59
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870

|
Цитата(scifi @ Aug 29 2012, 12:16)  Пожалуйста: спасибо за пример, Код USART_CR3 = 8; /* select half duplex */ может быть в этом проблема ? ... вечером попробую
Сообщение отредактировал Bob176 - Aug 29 2012, 12:02
|
|
|
|
|
Aug 29 2012, 13:21
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870

|
Цитата(scifi @ Aug 29 2012, 15:33)  У меня используется полудуплексный режим. Вам он едва ли понадобится. скорее наоборот полудуплексный режим я и использую и на мой взгляд он применяется чаще. А бездумное копирование кода - всегда не комильфо
|
|
|
|
Сообщений в этой теме
Bob176 UART2 на STM32F100C4 сплошные глюки :') Aug 28 2012, 07:50 hatchet Попробуйте настроить UART через стандартную stm... Aug 28 2012, 08:26 SSerge Зря Вы в обработчике прерываний USART_IT_RXNE испо... Aug 28 2012, 09:49 Bob176 Цитата(SSerge @ Aug 28 2012, 12:49) Зря В... Aug 29 2012, 21:05  vlad_new Цитата(Bob176 @ Aug 30 2012, 01:05) данны... Aug 29 2012, 23:02   Bob176 Цитата(vlad_new @ Aug 30 2012, 02:02) #de... Aug 30 2012, 06:36    Bob176 мнда... и всё же паритет!!!
всем... Aug 30 2012, 18:18 PoReX Вы там случаем контролем четности не балуетесь? А ... Aug 28 2012, 13:31 Bob176 Цитата(PoReX @ Aug 28 2012, 17:31) Вы там... Aug 28 2012, 13:49 _Pasha Цитата(Bob176 @ Aug 29 2012, 08:28) у мен... Aug 29 2012, 06:24 spectral1989 какой терминал и все ли там правильно стоит? baudr... Aug 29 2012, 06:03 ViKo Для scifi
У вас в коде есть строчка
(void)USART_D... Aug 29 2012, 12:50 scifi Цитата(ViKo @ Aug 29 2012, 16:50) У вас в... Aug 29 2012, 13:40  ViKo Цитата(scifi @ Aug 29 2012, 16:40) Кратко... Aug 29 2012, 14:39 sidy Т.е. если Вы находитесь в режиме передачи, но что-... Aug 29 2012, 14:20 scifi Цитата(sidy @ Aug 29 2012, 18:20) Т.е. ес... Aug 29 2012, 14:26 Bob176 ещё одна проблемка нарисовалась...
до скорости ... Sep 17 2012, 18:59 Сергей Борщ QUOTE (Bob176 @ Sep 17 2012, 21:59) где к... Sep 17 2012, 19:04 _Pasha Цитата(Bob176 @ Sep 17 2012, 21:59) до ск... Sep 17 2012, 19:06  Bob176 Цитата(_Pasha @ Sep 17 2012, 23:06) импул... Sep 18 2012, 10:06   DmitryM Цитата(Bob176 @ Sep 18 2012, 14:06) оптоп... Sep 18 2012, 10:16    Bob176 Цитата(DmitryM @ Sep 18 2012, 14:16) А ск... Sep 18 2012, 11:05     MBR Цитата(Bob176 @ Sep 18 2012, 15:05) мне и... Sep 18 2012, 11:34      Bob176 Цитата(MBR @ Sep 18 2012, 15:34) Ну, не х... Sep 18 2012, 12:20       scifi Цитата(Bob176 @ Sep 18 2012, 16:20) или н... Sep 18 2012, 12:44        Bob176 Цитата(scifi @ Sep 18 2012, 16:44) Есть и... Sep 19 2012, 11:12         DmitryM Цитата(Bob176 @ Sep 19 2012, 15:12) В дан... Sep 19 2012, 13:19          Bob176 Цитата(DmitryM @ Sep 19 2012, 17:19) А в ... Sep 19 2012, 16:15           Bob176 ну всё, разобрался!
передавал один ли... Sep 19 2012, 17:46       MBR Цитата(Bob176 @ Sep 18 2012, 16:20) в нач... Sep 18 2012, 12:56     DmitryM Цитата(Bob176 @ Sep 18 2012, 15:05) оптоп... Sep 18 2012, 16:44 MBR Цитата(Bob176 @ Sep 17 2012, 22:59) может... Sep 18 2012, 10:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|