Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Renner
1 / 1 / 0
Регистрация: 27.05.2014
Сообщений: 43
1

STM32f051r8t6 +UART

01.11.2017, 03:04. Просмотров 1190. Ответов 15
Метки нет (Все метки)

Здравствуйте, Коллеги. Не так давно начал изучение микроконтроллера STM32. У меня возникали сложности. Но сейчас я вообще не понимаю в чём дело и что происходит. Если кто мне поможет, буду безумно благодарен.
есть код программы:

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
43
44
45
46
47
#include "main.h"
 
int main(void)
 
{
    GPIO_InitTypeDef GPIO_Init_USORT;
    USORT_InitTypeDef USORT_ini;                         // Перенесли в начало
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);   //Включили тактирование шины А
    
    GPIO_Init_USORT.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10 ;
    GPIO_Init_USORT.GPIO_Mode=GPIO_Mode_AF;
    GPIO_Init_USORT.GPIO_OType=GPIO_OType_PP;
    GPIO_Init_USORT.GPIO_Speed=GPIO_Speed_Level_1;
    GPIO_Init_USORT.GPIO_PuPd=GPIO_PuPd_UP; 
    GPIO_Init(GPIOA, &GPIO_Init_USORT);
    
    // Вносим конкретику(говорим на каких ножках должен работаь наш UART)
    
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
    
    //Настройка самого UART
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1,ENABLE);
    
    USORT_ini.USORT_BaudRate=9600;
    USORT_ini.USORT_HardwareFlowControl=USORT_HardwareFlowControl_None;
    USORT_ini.USORT_Mode=USORT_Mode_Rx|USORT_Mode_Tx;
    USORT_ini.USORT_Parity=USORT_Parity_No;
    USORT_ini.USORT_StopBits=USORT_StopBits_1;
    USORT_ini.USORT_WordLength=USORT_WordLength_8b;
    
    //инициализируем то что сделали
    
    USORT_Init(USORT1,&USORT_ini);
    
    //Включаем сам USORT
    
    USORT_Cmd(USORT1, ENABLE);
    while(1)
    
    {
        USORT_SendData(USORT1,10);
        delay(5000);
        }
    
    }
Здесь я настраиваю USORT1. И отправляю по нему сообщение на компьютер. Лампочка Tx на переходнике горит. Значит какие то данные на неё приходят. Но ни одна программа не может прочитать отправленные данные. Их просто никто не видит. В чём может быть дело? Проблема в коде или проблема в переходнике или в чём вообще? Заранее благодарен
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2017, 03:04
Ответы с готовыми решениями:

Питание STM32F051R8T6 и её обвязка
Привет всем! Есть вопрос, строил одну приблуду на базе STM32F0DISCOVERY с процом STM32F051R8T6. Всё...

STM32F051R8T6 - Режим захвата
Ранее была реализована процедуры обработки посылки по "воздуху" от датчика, при помощи базового...

STM32F051R8T6 + NOKIA 1202, NOKIA1616 (EXAMPLE)
Подключил дисплейчик привожу код, кому то пригодится. Подключен к SPI1. CS и RESIT программно....

STM32F0DISCOVERY (STM32F051R8T6) настройка таймера и реализации такта в 1 мкс
Необходимо настроить таймер и получить временную границу между тиками таймера в 1мкс. Как это...

STM32F0DISCOVERY (STM32F051R8T6) Внешнее прерывание на PA1
Проблема с настройкой внешнего прерывания на PA1 Настройки прерывания: #include...

15
Shamrel
82 / 80 / 16
Регистрация: 11.03.2016
Сообщений: 206
01.11.2017, 05:19 2
USORT_SendData что делает? Я верно понял, что второй аргумент функции -- это значение байта для отправки? Если так, то вы шлете символ перевода строки (LF), он не печатный и в обычном VT100 совместимом терминале вы его не увидите. Шлите символ из "печатного" набора ASCII. Не забываем, что в языке Си получить код символа можно с помощью одинарных кавычек. Попробуйте так:
C
1
USORT_SendData(USORT1,'0');
0
Renner
1 / 1 / 0
Регистрация: 27.05.2014
Сообщений: 43
01.11.2017, 11:40  [ТС] 3
Такая же картина
0
Shamrel
82 / 80 / 16
Регистрация: 11.03.2016
Сообщений: 206
01.11.2017, 11:51 4
А мож это ... того?
STM32CubeMX использовать и все на HAL сделать?
0
01.11.2017, 11:51
Renner
1 / 1 / 0
Регистрация: 27.05.2014
Сообщений: 43
01.11.2017, 12:07  [ТС] 5
Я работаю в KeiluVision5. И это несерьёзно каждый раз переходить на новую среду разработки, когда что то не работает.

Может ли быть проблема в несогласованности напряжений : выходное напряжение stm32 и входное переходника? или с частотами что то?
0
Shamrel
82 / 80 / 16
Регистрация: 11.03.2016
Сообщений: 206
01.11.2017, 12:39 6
STM32CubeMX -- это не среда разработки, а графический кодогенератор, который умеет создавать проект в том числе и для Keil, инициализировать периферию. Посмотрите. Занятная штука. Даже если религия не позволяет использовать чей-то код, то бывает полезно с помощью его убедиться в том, что с железом все в порядке и посмотреть как производитель чипов рекомендует инициализировать и работать с периферией.
1
locm
2286 / 1001 / 127
Регистрация: 28.10.2011
Сообщений: 3,378
Записей в блоге: 6
01.11.2017, 13:11 7
Цитата Сообщение от Shamrel Посмотреть сообщение
STM32CubeMX использовать и все на HAL сделать?
Не имеет смысла.
HAL еще "жирнее" чем SPL, а результат тот же.

Касаемо кода. Нужно выбрать источник тактирования USORT.
C
1
RCC_USORTCLKConfig(RCC_USORT1CLK_SYSCLK);  // USORT тактируется от ядра МК.
0
ValeryS
Модератор
7937 / 5910 / 781
Регистрация: 14.02.2011
Сообщений: 20,339
Завершенные тесты: 1
01.11.2017, 13:22 8
Цитата Сообщение от locm Посмотреть сообщение
HAL еще "жирнее" чем SPL,
азачем там память экономить? две задачи все равно не всунешь
А вот перенос с одной платформы на другую гораздо проше
0
locm
2286 / 1001 / 127
Регистрация: 28.10.2011
Сообщений: 3,378
Записей в блоге: 6
01.11.2017, 14:02 9
Цитата Сообщение от ValeryS Посмотреть сообщение
азачем там память экономить?
HAL требует слишком много оперативной памяти.

Цитата Сообщение от ValeryS Посмотреть сообщение
А вот перенос с одной платформы на другую гораздо проше
Куб не предоставляет возможность (по крайней мере я ее не нашел) перенести проект на абсолютно любую модель STM32. Обычно предоставляется крайне ограниченный выбор МК.
0
Shamrel
82 / 80 / 16
Регистрация: 11.03.2016
Сообщений: 206
01.11.2017, 15:30 10
Цитата Сообщение от locm Посмотреть сообщение
Куб не предоставляет возможность (по крайней мере я ее не нашел) перенести проект на абсолютно любую модель STM32. Обычно предоставляется крайне ограниченный выбор МК.
А проект переносить не нужно. Нужно его создать под новый процессор заново. Но вот код, который вы писали для предыдущего проекта используя библиотеку HAL портируется как есть тупо копированием файлов.
В свое время я был в восторге, когда проект написанный для F0 за полчаса удалось запустить на F4.
0
locm
2286 / 1001 / 127
Регистрация: 28.10.2011
Сообщений: 3,378
Записей в блоге: 6
01.11.2017, 15:35 11
Цитата Сообщение от Shamrel Посмотреть сообщение
Нужно его создать под новый процессор заново.
И заново все настраивать. А учитывая что у разных семейств МК возможности периферии могут значительно отличаться, то все не так радужно как рассказываете.

Цитата Сообщение от Shamrel Посмотреть сообщение
В свое время я был в восторге, когда проект написанный для F0 за полчаса удалось запустить на F4.
С F4 не приходилось работать, но перенос проекта с SPL с F1 на F0 у меня обычно не вызывает затруднений.
0
Renner
1 / 1 / 0
Регистрация: 27.05.2014
Сообщений: 43
01.11.2017, 17:32  [ТС] 12
Могу ли я закоротить Rx и Tx, чтобы проверить передаются ли данные по uart? Просто я дальше хочу по Ethernet данные передавать с STM, а приступать к этому не отработав передачу данных по uart не очень хотелось бы. И в чём может быть проблема есть какие нибудь предложения?
0
_SayHello
788 / 474 / 156
Регистрация: 30.07.2015
Сообщений: 1,579
02.11.2017, 09:14 13
Лучший ответ Сообщение было отмечено Renner как решение

Решение

Renner, Кстати, ты через что передаешь на ПК данные ? Через cp2102? Дрова поставил? Выход Tx контроллера надо соединить с Rx переходника, не перепутал?
1
alexey6689
95 / 68 / 14
Регистрация: 15.11.2012
Сообщений: 478
Завершенные тесты: 1
03.11.2017, 00:52 14
Лучший ответ Сообщение было отмечено Renner как решение

Решение

Да, можно закоротить Rx и Tx.
Здесь разумный вопрос задан - через какое устройство передаются данные на ПК?
На используемой плате с контроллером скорее всего стоит честный преобразователь уровней для COM порта (логический 0 - +12в, логический 1 - -12в). Однако ряд дешевых переходников UART-USB преобразователя не имеют и у них 0 - это 0в, 1 - это как правило +3в.
Не забываем что выход Tx надо подавать на Rx.
Совпадают ли скорости приема-передачи на компе и контроллере? Также количество стоп-бит, старт-бит?



Добавлено через 14 минут
Только что почитал pdf на контроллер.
Там указано, что PORTA работает на шине AHB2, а USORT1 - на APB.
В вашей программе
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1,ENABLE);
1
Renner
1 / 1 / 0
Регистрация: 27.05.2014
Сообщений: 43
03.11.2017, 02:36  [ТС] 15
Всем спасибо за ответы! В самом деле я перепутал контакты. я использовал cp2102. Я закоротил сначала Tx на Tx. Я думал это одна и та же точка. Но оказалось нет. Код работает хорошо. Я настраивал всё по коду библиотек stdperiph. На досуге попробую сделать поправки указанные в комментарии выше. Но мой вариант кода работает и нормально. Ошибок не было.

Хочу спросить ещё : кто-нибудь пытался передавать данные с STM32 через HR911105A ?

Есть какие то рекомендации или наработки? Очень интересна вся эта штуковина, правда поработать с этим получается только ночью)

Кстати, может не совсем в тему, но очень интересно. У меня есть АЦП MCP3008. у него есть такой параметр: 200 килосемпл/с... это 200 000 измерений в секунду или это предельная частота работы?
0
_SayHello
788 / 474 / 156
Регистрация: 30.07.2015
Сообщений: 1,579
03.11.2017, 07:39 16
Renner,
Цитата Сообщение от Renner Посмотреть сообщение
Кстати, может не совсем в тему, но очень интересно. У меня есть АЦП MCP3008. у него есть такой параметр: 200 килосемпл/с... это 200 000 измерений в секунду или это предельная частота работы?
Это частота дискретизации, частота с которой вы сможете оцифровать сигнал оцифровать сигнал
1
03.11.2017, 07:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2017, 07:39

Программный UART
Здравствуйте! Из-за отсутствия второго аппаратного UARTa мне нужно реализовать его программным...

AT89C51 UART
Добрый вечер. Вот возникла такая проблема: на контролере AT89C51 питаюсь завести UART. SCON: SM0 =...

ST-Link/2 & UART
На дискавирине 429ой UART 429го соединён с стлинком. Знает кто, как до него достучаться? upd....


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

Или воспользуйтесь поиском по форуму:
16
Voland_
1731 / 1066 / 105
Регистрация: 04.01.2010
Сообщений: 3,650
06.11.2017, 19:17 17
ТС,
Цитата Сообщение от _SayHello Посмотреть сообщение
частота с которой вы сможете оцифровать сигнал оцифровать сигнал
...по одному каналу. "Sample" в этом контексте обозначает одно измерение. Если каналов много - то каналы мультиплексируются на вход АЦП.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.