Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/88: Рейтинг темы: голосов - 88, средняя оценка - 4.64
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121

Кракозябры по UART

29.04.2019, 07:47. Показов 18466. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Необходимо передать строку через UART с контроллера в компьютер. Но приходят кракозябры. Тактирование от кварца 8МГц. Скорость 9600. В качестве терминала использую утилиту COM Port Toolkit. Конвертор рабочий.

При отправке строки
C
1
USART2_send_string("Hello\r\n");
приходят другие коды, соответствующие кракозябрам. Как исправить такую ситуацию.


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void UART_init(){
 
  RCC->APB1ENR |= RCC_APB1ENR_USART2EN;          
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;            
 
 GPIOA->MODER   |= GPIO_MODER_MODER2_1|GPIO_MODER_MODER3_1; 
 GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2|GPIO_OSPEEDER_OSPEEDR3; 
 
 GPIOA->AFR[0]      |=  0x00000700;         
 GPIOA->AFR[0]      |=  0x00007000;         
    
 USART2->BRR            =0x0341;        //(f_ck+bautrade/2)/bautrade   bautrade=9600=>833=0x341
    
USART2->CR1         |= USART_CR1_TE;                
USART2->CR1         |= USART_CR1_RE;            
USART2->CR1         |= USART_CR1_UE;     
 
USART2->CR1         |= USART_CR1_RXNEIE;         
NVIC_EnableIRQ(USART2_IRQn);       
} 
 
 
void USART2_send_symbol(char chr){
    while(!(USART2->SR & USART_SR_TC));     
    USART2->DR     = chr;            
}
 
 
void USART2_send_string(char* str){ 
    
    uint8_t counter = 0;
    while(str[counter])                                 
    USART2_send_symbol(str[counter++]); 
}
 
void RCC_init(){
    
    RCC->CR|=RCC_CR_HSEON; 
    while (!(RCC->CR & RCC_CR_HSERDY)) {}; 
    RCC->CFGR &=~RCC_CFGR_SW; 
    RCC->CFGR |= RCC_CFGR_SW_HSE;
}
Миниатюры
Кракозябры по UART  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2019, 07:47
Ответы с готовыми решениями:

UART выводит кракозябры
Дали лабу вывести в терминал символ в протеусе. Ничего в этом не понимаю совсем. Выводятся кракозябры. Так еще и постоянно, а не 1 раз...

Конфигурация UART и просмотр файла, в который приходят данные с UART
Уважаемые коллеги! Подскажите, пожалуйста, как будет оптимальнее прочитать (скорее залогировать файл), в который пишутся данные с...

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к gsm модему. В первый уарт вывожу инфу...

20
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
29.04.2019, 08:21
Отправьте с МК массив 0xff 0xff 0x00 0x00 0xaa 0x55 0xff и покажите, что принимается на ПК.
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
29.04.2019, 10:40  [ТС]
C
1
2
3
4
5
int arr[] = {0xff, 0xff, 0x00, 0x00, 0xaa, 0x55, 0xff};
 
for(int i=0; i<=6; i++){    
  USART2_send_symbol(arr[i]);
 }
Миниатюры
Кракозябры по UART  
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
29.04.2019, 10:41
Проверьте частоту APB1. Не стоит полагаться на умолчания, лучше явно пропишите делители 1:1.
После переключения RCC_CFGR_SW надо еще дождаться готовности RCC_CFGR_SWS
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
29.04.2019, 10:46
lipton_v, должна быть ошибка в настройке тактирования. Скорее всего, полученная скорость не та, на которую вы рассчитываете.
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
29.04.2019, 10:54  [ТС]
Если убрать функцию настройки тактирования, получается частота будет 8МГц от внутреннего генератора. В данном случае передаются кракозябры, но уже другие кракозябры
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
29.04.2019, 11:11
lipton_v,
У вас, конечно же, есть такая необходимая эмбеддеру вещь, как осциллограф?
Ещё хорошо бы привести схему платы и указать модель микроконтроллера.
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
29.04.2019, 11:12  [ТС]
Своего осциллографа пока еще нет, но можно напроситься к тому, у кого он есть
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
29.04.2019, 11:25
Напроситесь.
Плату запрограммируйте так, чтобы отправляла посылку 0xff 0x00 0xaa 0x55 0cf0 0x0f 0x00 0xff периодически, с интервалом в секунд 5 между посылками.
На осциллографе сначала проверьте, что форма сигнала соответствует передаваемым байтам. Нули и единицы, паузы, стартовый и стоповый биты.
Затем снимите фото или скриншот (если подключается к ПК) самого первого байта, 0xff, растянув его как можно шире на экран, но чтобы влез. Запишите шаг сетки по оси времени. Затем сюда выложите фото и шаг.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
29.04.2019, 11:50
Цитата Сообщение от lipton_v Посмотреть сообщение
//(f_ck+bautrade/2)/bautrade * bautrade=9600=>833=0x341
откуда эта формула?
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
29.04.2019, 11:52
lipton_v, как вам и подсказывают, ошибка явно в настройке тактирования. Ради интереса, пощёлкайте соседние скорости в терминале например 19200, 38400. Если посылка станет приходить без косяков, то значит у вас частота шины во столько же раз выше 8 МГц.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
29.04.2019, 13:02
Цитата Сообщение от lipton_v Посмотреть сообщение
Если убрать функцию настройки тактирования, получается частота будет 8МГц от внутреннего генератора.
Уверены ли вы, что тактирование будет от HSI на 8 МГц, а не, скажем, от MSI на 2 МГц? Не зная что у вас за камень, сложно дать конкретный совет. Разве что настроить тот же UART на 0,1 бод (для 8 МГц это USART2->BRR=80000000), послать 0x55 и посмотреть просто светодиодом на ножке TX точно ли там 10 сек импульс.
...кстати, не знаю сработает ли это вообще...

Добавлено через 1 час 9 минут
UPD: проверил. Оказывается, у stm32l1 делитель 12-битный (вообще-то 16-битный, но там какие-то свои танцы с бубном) так что ниже 122 Гц при тактовой 8 МГц не выйдет. Глазом это не разглядеть, увы
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
29.04.2019, 16:03  [ТС]
Камень STM32F407VG. Формула расчета (f_ck+bautrade/2)/bautrade * bautrade=9600=>833=0x341 взята из интернета. В сети есть и другие формулы, но результат расчета совпадает. Для 8МГц - 0x341
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
30.04.2019, 09:28
Цитата Сообщение от lipton_v Посмотреть сообщение
Для 8МГц - 0x341
Да формула-то правильная. Вот только в даташите на первой же странице указан внутренний RC на 16 МГц, а не на 8. Попробуйте USART2->BRR =0x0683.

Добавлено через 2 минуты
А еще лучше - не используйте магических чисел:
C
1
USART2->BRR = 16000000 / 9600;
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
30.04.2019, 10:57  [ТС]
Меняю скорость в терминале. Все время кракозябры, либо точки. В файле stm32f4xx.h:

#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

Т.е. кварц на 8МГц. Меняю настройку тактирования прописывая явно делители:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void RCC_init(){
    
    RCC->CR|=RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY)) {};  
    RCC->CFGR &= RCC_CFGR_HPRE        
                        | RCC_CFGR_PPRE1        
                        | RCC_CFGR_PPRE2;       
        
    RCC->CFGR &=~RCC_CFGR_SW;         
    RCC->CFGR |= RCC_CFGR_SW_HSE;    
        
    while(!(RCC->CFGR & RCC_CFGR_SWS)) {
        RCC->CR &= ~RCC_CR_HSEON;       
    }
}
Результат не меняется
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
30.04.2019, 11:04
lipton_v, фото с осциллографа есть или не будет?

Добавлено через 3 минуты
Похожие темы, где напутали:
Stm32 передача данных по UART
Обмен USART <-> ПК
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
30.04.2019, 11:40  [ТС]
Пока еще нету. Так приходится
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
30.04.2019, 11:43
lipton_v, попробуйте сконфигурировать проект в CubeMX.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
30.04.2019, 13:42
Цитата Сообщение от lipton_v Посмотреть сообщение
while(!(RCC->CFGR & RCC_CFGR_SWS)) {
RCC->CR &= ~RCC_CR_HSEON;
}
Что эта конструкция должна делать? Я, конечно, не гуру в stm-ках, но выглядит она довольно бредово.
Попробуйте все же поправить коэффициент деления UART как я вам советовал. Либо хотя бы поставить в терминале 19200
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
30.04.2019, 13:42
Цитата Сообщение от lipton_v Посмотреть сообщение
while(!(RCC->CFGR & RCC_CFGR_SWS)) {
RCC->CR &= ~RCC_CR_HSEON;
}
Что эта конструкция должна делать? Я, конечно, не гуру в stm-ках, но выглядит она довольно бредово.
Попробуйте все же поправить коэффициент деления UART как я вам советовал. Либо хотя бы поставить в терминале 19200
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2019, 13:42
Помогаю со студенческими работами здесь

Два TX UART на один RX. Мультиплексирование UART.
Привет, сообщество. Возник небольшой затык. Есть необходимость при одном UART на Atmego32 подавать на вход два сигнала от других...

Кракозябры
Название формы нормально отображается, а там где меню пуск пишет кракозябры какие то. Проблемы с кодировкой? Я и по английски caption формы...

Кракозябры
Здравствуйте, товарищи. Есть запрос SELECT Value FROM Table Value имеет тип nvarchar() В результирующей выборке получаю записи как...

Кракозябры
Здравствуйте! Только что установил Denwer. Из страницы .html не хочет работать php. Почитал мануал по этому, вот цитирую: Однако Вы можете...

Кракозябры
Пользуюсь adobe dreamweaver'ом, не могу в нем найти переход на кодировку utf-8 without BOM, есть только просто utf-8. используя просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru