При поданном питании я планшетом вижу устройство под названием 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++;
}
}


