Bluetooth модуль HM-11.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Bluetooth модуль HM-11.

Сообщение uldemir »

Требуется помощь экстрасенсов. Стоит задача получить связь с модулем. Проблема в том, что модуль я уже припаял к плате и теперь пытаюсь с микроконтроллера до него достучаться. Микроконтроллер stm32f051.

При поданном питании я планшетом вижу устройство под названием HMSoft. Т.е. сам модуль жив. Подключиться не могу - но это и понятно: по умолчанию оно должно соединяться только с подобным, вроде. Ну вот пытаюсь с микроконтроллера до него достучаться... а вот не выходит.

На микроконтроллере я назначил PA9-PA12 на USART1. Сконфигурировал на 9600,8,1. Шлю AT и ничего не происходит. проблема еще в том, что у порта включен RTS/CTS и эти выводы задействованы и на модуле и на микроконтроллере. Так вот не происходит даже передача. Если в USART выключить RTS/CTS, то передача происходит, но в ответ приёма нет.

Передачу я проверил на платке STM32F0-discovery - закоротил PA9 и PA10 - получил loopback - посланные символы вижу принятыми в кольцевой буфер. Был подключивши переходник на FTDI232R - в компьютере вижу передаваемые символы - т.е. TX/RX навроде работают и даже скорость 9600 есть.

Где мне что еще проверить?

Спойлер

Код: Выделить всё

			USART_send("I am iron man, I am iron man, I am iron man, I am iron man, I am iron man, I am iron man\r\n");
			USART_send("AT\r\0");
			put_string("AT sent\r\n");
			while (!kbdread()) {
				if (IsRxdata()) put_char(USART_receive());
			}

Код: Выделить всё

#include <stm32f0xx.h>
#define USART	USART1
#define FIFO_BUFFER_SIZE	160

void USART_Init(void) {
	RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
	
	USART->CR1 = USART_CR1_RXNEIE;
//	USART->CR3 = USART_CR3_CTSE | USART_CR3_RTSE;
	USART->BRR = 0x1388; // 9600: oversample 16, Fck=48MHz
	
	USART->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
	NVIC_EnableIRQ(USART1_IRQn);
}

unsigned char 	RxFIFObuf[FIFO_BUFFER_SIZE], 
	*Rx_rd_ptr =  RxFIFObuf, 
	*Rx_wr_ptr = 	RxFIFObuf;

void USART1_IRQHandler(void) {
	if (USART->ISR & USART_ISR_RXNE) {
		unsigned char * old_rx_ptr;
		old_rx_ptr = Rx_wr_ptr;
		*Rx_wr_ptr++ = USART->RDR;
		if (Rx_wr_ptr > &RxFIFObuf[FIFO_BUFFER_SIZE - 1]) {
			Rx_wr_ptr = RxFIFObuf;
		}
		if (Rx_wr_ptr == Rx_rd_ptr) {
			Rx_wr_ptr = old_rx_ptr; // overflow!
		}
	}
	if (USART->ISR & USART_ISR_TXE) {
	}
}

unsigned int IsRxdata(void) {
	return (Rx_rd_ptr == Rx_wr_ptr) ? 0 : 1;
}

unsigned char USART_receive(void) {
	unsigned char result;
	while (Rx_rd_ptr == Rx_wr_ptr) continue;
	result = *Rx_rd_ptr++;
	if (Rx_rd_ptr > &RxFIFObuf[FIFO_BUFFER_SIZE - 1]) {
		Rx_rd_ptr = RxFIFObuf;
	}
	return result;
}

void USART_send(char * string) {
	while (*string) {
		while (!(USART->ISR & USART_ISR_TXE)) continue; 
		USART->TDR = *string++;
	}
}
Изображение
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Re: Bluetooth модуль HM-11.

Сообщение AAX »

Сбрасывать настройки модуля в дефолт пробовали? Для этого нужно GPIO0 (который должен быть подтянут к питанию, вощимта) прижать на землю на некоторое время.
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Bluetooth модуль HM-11.

Сообщение uldemir »

Припаял к 11 выводу резистор 68 кОм на плюс питания (9-й вывод) , коротил пинцетом на 12-й вывод - ничего не поменялось.
А... коротнул 16-й вывод на массу - получил OK+WAKE. Но я же ему для пробуждения посылаю строку из более 80 символов? Что делать? У меня нет свободных ног, для манипуляций с PIO0

И это при выключенном RTS/CTS. Если включить, то как и раньше - ничего не идёт.

Насчет "подтянутости к питанию" в интернете вижу примеры, где ничего не подтянуто и используется всего 4 провода TX, RX, Vcc и Gnd

p.s. заметки для меня:
установить AT+PWRM в 1 - уже должно быть по-умолчанию
AT+UART
0: When module into sleep mode, you can wake up module through UART.
1: When module into sleep mode, shutdown UART too.
Default: 0xFFE0
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Bluetooth модуль HM-11.

Сообщение uldemir »

Что-то у меня всё еще не получается. Как и раньше получаю только OK+WAKE попытка послать следом командe AT+UART? - никакого эффекта не даёт.
Ага. На AT всё же отвечает OK. Оказалось, что AT+UART это для какой-то sensor version. Проверил версию своего аппарата: "HMSoft V605".

Ага. понял свою ошибку. Меня смутила команда "AT" и я пытался с модулем разговаривать как с обычным старым телефонным модемом. Оказывается, команду нужно посылать просто одним пакетом без символа возврата каретки и без пауз. Но с паузой перед следующей командой.

но RTS/CTS всё еще не работают.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Эиком - электронные компоненты и радиодетали
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Re: Bluetooth модуль HM-11.

Сообщение AAX »

[uquote="uldemir",url="/forum/viewtopic.php?p=3800283#p3800283"]Припаял к 11 выводу резистор 68 кОм на плюс питания[/uquote]это зачем? Посмотрите на свою схему, там английским по белому написано PIO0 - 16 нога. Её нужно подтянуть к плюсу, и зажать на землю секунд на 5, если нужно сбросить в дефолт контроллер. Не обязательно занимать на этот вывод ногу управляющего мк, можно обойтись аналоговой конструкцией на полевом транзисторе и RC цепочке, чтобы при включении питания 16 вывод был прижат к земле, а через секунд 5 поднимался бы в 1. Это даст сброс настроек в дефолт при каждом подключении питания. Но Вы можете и не сбрасывать настройки каждый раз, а уповая на милость Божию, настроить модуль однажды, и «использовать так» - рекомендации лучших ардуинщиков страны ;)
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Bluetooth модуль HM-11.

Сообщение uldemir »

Я уж написал, что перепутал-не понял итд. Сейчас актуально RTS/CTS и чем к нему подключиться. Мой андроид модуль видит, но не пайрится. Когда на планшете тыкаюсь в найденное устройство появляется OK+CONN OK+LOST и ничего больше. Через программу CySmart я могу соединиться (без авторизации!) и послать что-нибудь на устройство (собственно одна из целей). Вот только вопрос, а есть ли какой софт, который это умеет делать несколько комфортнее?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Re: Bluetooth модуль HM-11.

Сообщение AAX »

rts/cts совершенно не обязательны для того, чтобы понять, что модуль умеет. Соответственно, нет смысла упираться в аппаратный контроль передачи до тех пор, пока Вы не поймёте, что модуль удовлетворяет Ваши надежды и мечты ;) cts модуля только на "землю" посадите, чтобы он не ждал вечно возможности передать данные. Когда время разбираться с hw flow control придёт - перечитайте мануал про usart, с большой вероятностью сейчас у Вас порт настраивается по auto negotiation, т.к. кучу параметров Вы не указываете явно.
Насчёт приложеньки - есть специально для этих модулей сделанные программки, автор у них "HMSoft", а называются они что-то вроде HMBluetooth и HMNearby scanner... Поищите, я не помню уже наверняка.
Ответить

Вернуться в «Разные вопросы по МК»