Кто любит RISC в жизни, заходим, не стесняемся.
Чт авг 16, 2018 08:45:25
Здравствуйте!
Нужно сконфигурировать bluetooth модуль RN-42. В принципе он особо не отличается от HC, но тк я с этим сталкиваюсь в первый раз,у меня вопросы.
Модуль у меня впаян в плату и соединен с STM по USART, так что сконфигурирвать я его не могу, подключая к пк и пользуясь терминалом. По блютуз я тоже не могу его найти, видимо он в mastermode. Остается толькор конфигурировать командами STM. НО в документации на модуль все команды представлены в виде, например:
S7,1
То есть строка символов(команда), запятая для разделения, значение установки
Это для терминала. Я перевожу эту команду в команду для мк.
Правильно ли я делаю?
- Код:
uint8_t cmd[2];
uint8_t val[1];
cmd[0]='S';
cmd[1]='7';
val[0]=1;
HAL_UART_Transmit(&uart1, cmd, 2, 1);
HAL_UART_Transmit(&uart1, val, 1, 1);
Или подавать все 1 массивом?
- Код:
uint8_t cmd[4];
cmd[0]='S';
cmd[1]='7';
cmd[2]=',';
cmd[3]='1';
HAL_UART_Transmit(&uart1, cmd, 4, 1);
Единица в конце это тоже символ или все-таки значение? Нужна ли запятая или она для терминала?
Чт авг 16, 2018 10:02:04
ну если модуль принимает команды терминала как символы ASCII, то все данные должны быть символами. Более того - наверное в конце надо передать какие-то управляющие символы, типа /n/r.
Чт авг 16, 2018 10:14:42
К сожалению об этом в документации не сказано ничего(
А не может терминал по своему интерпретировать вводимые с клавиатуры данные?
Например отправлять по очереди сначала строку SF потом символ 1?
Чт авг 16, 2018 11:24:22
терминал не передает никакие строки и отдельно символы, он даже тайминги никакие не считает. Вы нажимаете кнопку на клавиатуре - терминал передает какой-то символ в какой-то выбранной кодировке, скорее всего ASCII, по какому-то выбранному протоколу/интерфейсу. Если эта "консолька" разбирает вводимое на строки и отдельные символы, то это уже не терминал, а командная оболочка, например как bash.
Добавлено after 54 minutes 6 seconds:судя по
https://cdn.sparkfun.com/datasheets/Wir ... -v1.0r.pdfтам именно терминал, так что дао все в символах передавать, а чтобы устройство приняло команду в исполнение в конце передавать символы перевода каретки и новой строки.
Чт авг 16, 2018 12:57:48
Модуль у меня впаян в плату и соединен с STM по USART, так что сконфигурирвать я его не могу, подключая к пк и пользуясь терминалом
а подпаяться к TX/RX никак?)
судя по мануалу, в режим настройки (command mode) еще войти надо
Once a connection is made, you can only enter command mode if the boot-up config-
uration timer has not expired (60 seconds). To remain in configuration mode, set the
configuration timer to 255.
....
Type $$$ into the terminal emulator to enter command mode.
The module returns the string CMD, which indicates that your connection and terminal
settings are correct. While in command mode, the module accepts ASCII bytes as com-
mands. When you enter a valid command, the module returns AOK. It returns ERR for an
invalid command and ? for unrecognized commands
Ярослав555 писал(а):в конце передавать символы перевода каретки и новой строки
мануал требует только CR
bezzabotna, раз передавать ASCII символы и CR - ваша команда из примера будет типа uint8_t cmd[]="S7,1\r"
Чт авг 16, 2018 13:20:36
мануал требует только CR
ну я не вчитывался в тот мануал. В свое оправдание скажу, что когда в терминале жмакаешь энтер, то он оба символа передает, так что модуль и \n должен переваривать без проблем (игнорировать). Только что лишняя память на символ израсходуется... Но я бы оставил - можно стать на обмен данными и подслушать общение. А без новой строки весь обмен не увидишь.
Чт авг 16, 2018 13:38:36
Сейчас делаю так. Посоветовали сделать сброс после установки скорости(какая реальная скорость настроена в модуле я не знаю). Делаю это аппаратно.
Подпаяться нет возможности.
Пробовала и \r\n и просто \r
- Код:
int main(void){
uint8_t cmd[]={"$$$"};;
uint8_t reboot[]={"R,1\r"};
uint8_t spd96[]={"SU,96\r"};
uint8_t def_settings[]={"SF,1\r"};
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
BT_ON;
BT_RES_OFF;
HAL_UART_Transmit(&huart1, cmd, strlen(cmd), 0xFFFFFF);
HAL_Delay(500);
HAL_UART_Transmit(&huart1, spd96, strlen(spd96), 0xFFFFFF);
BT_RES_ON;
HAL_Delay(500);
BT_RES_OFF;
HAL_Delay(500);
HAL_UART_Transmit(&huart1, def_settings, strlen(def_settings), 0xFFFFFF);
...
}
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;//115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
Но никакие устройства мой модуль так и не видят. Модуль рабочий, по USARTу сигналы ходят.
Чт авг 16, 2018 13:46:24
в cmd тоже \r надо
ну и "по USARTу сигналы ходят" - а чего модуль на команды отвечает?
Чт авг 16, 2018 13:59:20
To find the power setting:
1. Type $$$ in a console to put the module into command mode.
2. Type SF,1 <cr> to restore the factory defaults.
3. Type R,1 <cr> to reboot the module.
4. Type $$$ to go into command mode.
5. Type GY <cr> to view the power setting.
Вроде не нужен.
ПО RX со стороны мк сигналы тоже доходят, но не было возможности их разобрать.
Меня беспокоит то , что я не знаю на какую скорость настроен модуль. Понимает ли он первую команду.
Чт авг 16, 2018 14:30:10
ну вот собственно надо разобрать, чо там модуль в порт пишет.
Чт авг 16, 2018 15:31:29
- Код:
HAL_UART_Transmit(&huart1, cmd, strlen(cmd), 0xFFFFFF);
HAL_Delay(2000);
HAL_UART_Receive(&huart1, reply, 3, 0xFFFFFF);
HAL_UART_Transmit(&huart1, def_settings, strlen(def_settings), 0xFFFFFF);
HAL_UART_Transmit(&huart1, reboot, strlen(reboot), 0xFFFFFF);
застревает на HAL_UART_Receive в функции UART_WaitOnFlagUntilTimeout
крутится в бесконечном цикле в ожидании флага. В reply ничего не записывается. Я правильно пытаюсь информацию принять?
Добавлено after 50 minutes 19 seconds:Сделала аппаратный сброс и модуль даже мне светодиодиком моргнул через пин состояния, но так и не определяется внешними устройствами зараза..
Чт авг 16, 2018 15:41:09
подпаяйте уже два проводка к tx/rx. Вот я ничуть не верю, что это никак совершенно не возможно сделать.
потом залейте не использующую uart прошивку и подцепитесь с компа к модулю.
Чт авг 16, 2018 15:46:47
у меня нет переходника(
Чт авг 16, 2018 16:00:22
у меня нет переходника(
купить? FT232 и спаять? было дело я и на цифровом осциле пакеты разбирал! Во весело было! Неделю сидел в шоке - мой снифер данные оригинального устройства показывает, я имитирую 1в1, а мастер не признает! Оказалось 9й бит не парность вовсе, а первый байт в пакете помечает.
Чт авг 16, 2018 16:09:44
Я бы, по-простому, прицепил терминалку к свободному USART'у и засунул в МК простейшую программу, которая принимает байт с терминального USART'а и отдает его на bluetooth'ный. Ну, и наоборот. После этого спокойно разбираем терминалкой все, что может сказать и что может принять этот bluetooth.
Чт авг 16, 2018 16:20:50
afz, боюсь для ТС это слишком сложная задача, присмотритесь к последнему выложенному коду.
Чт авг 16, 2018 16:56:54
Да ладно, справится она. Если что - поможем. Все-таки единственная дама в нашем суровом мужском коллективе эмбеддеров...
Пт авг 17, 2018 07:15:12
dosikus, что не так с кодом?
Пт авг 17, 2018 11:42:45
Вы работу UART вообще представляете?
Пт авг 17, 2018 11:57:49
Представляю.
Вы на вопрос не ответили. Вы скажите, раз уж начали. Возьму на заметку, если что-то полезное.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.