El módulo bluetooth HC 05 no funciona con stm32

1

Estoy intentando obtener un Módulo Bluetooth HC-05 que trabaja con el módulo stm32f103c8t6 ( píldora azul ). Usé este usb para el módulo en serie para probar cada una de las placas mencionadas y esta aplicación de Android para conectarse a bluetooth. Tanto STM32 como HC05 funcionan bien individualmente. Puedo enviar y recibir datos a través de la aplicación serial y Android sin problemas a una velocidad de 9600 (usando USART1 de stm32f103).

ElproblemaesquecuandoconectoelHC05yelmicrocontrolador,nofunciona.ElmicropuederecibirdatosdeBluetooth(loséporqueenciendeyapagaelLED)peronopuedoverningúndatorecibidoenmiteléfonoAndroid.Aquíestámicódigo(elcódigosecompilayflasheaconCoocoxIDE):

#include"stm32f103xb.h"
#include <stdlib.h>
#include <stdio.h>
#include "STM32_USART.h"

int main(void)
{

// Configure system clock and prescalers
RCC->CR |=  RCC_CR_HSION;
// Wait till HSI is ready
while((RCC->CR & RCC_CR_HSIRDY) != RCC_CR_HSIRDY){}
RCC->CFGR &= ~(RCC_CFGR_HPRE);  // set AHB prescaler to 1
RCC->CFGR = ((RCC->CFGR & ~(RCC_CFGR_PPRE1)) | RCC_CFGR_PPRE1_DIV2); // set APB1 prescaler to 2 (PCLK1)
RCC->CFGR = ((RCC->CFGR & ~(RCC_CFGR_PPRE2)) | RCC_CFGR_PPRE2_DIV1); // set APB2 prescaler to 1 (PCLK2)

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;  // Enable Port A

// Configure a pin for LED
GPIOA->CRL |= GPIO_CRL_MODE1;
GPIOA->CRL &= ~GPIO_CRL_CNF1;

GPIOA->BSRR |= GPIO_BSRR_BS1;
// Initialize USART1 communication 
usart_init();

while(1){
    char data = usartByteReceive();
    //      usartByteSend(85);
    //      char data = ' ';
    if(data == '1')
    {
        // Turn LED on
        GPIOA->BSRR |= GPIO_BSRR_BS1;
        usartByteSend('F');  // send F
        usartByteSend('\r');
        usartByteSend('\n');
    }
    else if(data == '0')
    {
        // Turn LED off
        GPIOA->BRR |= GPIO_BRR_BR1;
        usartByteSend('S'); // send S
        usartByteSend('\r');
        usartByteSend('\n');
    }
    }
}

Después de esto, pensé que tal vez el problema es el reloj del sistema, así que cambié a PLL clock para el reloj del sistema usando un cristal externo de 8MHz (incorporado en el módulo) para tener un reloj más preciso, pero sin suerte: \

Aquí está el código para eso:

#include "stm32f103xb.h"
#include <stdlib.h>
#include <stdio.h>
#include "STM32_USART.h"

int main(void)
{

// Configure system clock and prescalers
// Set the HSE on
RCC->CR |=  RCC_CR_HSEON;
// Wait till HSE is ready
while((RCC->CR & RCC_CR_HSERDY) != RCC_CR_HSERDY){}
// Set HSI on
RCC->CR |=  RCC_CR_HSION;
// Wait till HSI is ready
while((RCC->CR & RCC_CR_HSIRDY) != RCC_CR_HSIRDY){}
// Disable the PLL
RCC->CR &= ~RCC_CR_PLLON;
// Wait till main PLL is disabled
while((RCC->CR & RCC_CR_PLLRDY) == RCC_CR_PLLRDY){}
// Configure the HSE prediv factor
// It can be written only when the PLL is disabled. Not used in PLL source is different than HSE
RCC->CFGR &= ~RCC_CFGR_PLLXTPRE;
RCC->CFGR = (RCC->CFGR & ~(RCC_CFGR_PLLMULL | RCC_CFGR_PLLSRC)) | (RCC_CFGR_PLLMULL2 | RCC_CFGR_PLLSRC);

// Enable the PLL
RCC->CR |= RCC_CR_PLLON;
// Wait till main PLL is enabled
while((RCC->CR & RCC_CR_PLLRDY) != RCC_CR_PLLRDY){}

// SYSTEM CLOCK
FLASH->ACR = (FLASH->ACR & ~(FLASH_ACR_LATENCY)) | FLASH_ACR_LATENCY_1;
RCC->CFGR &= ~(RCC_CFGR_HPRE);  // set AHB prescaler to 1
RCC->CFGR |= RCC_CFGR_SW_PLL;   // set SYSCLK to PLL source
// wait till system clock is set to PLL
while((RCC->CFGR & RCC_CFGR_SWS_PLL) != RCC_CFGR_SWS_PLL){}
RCC->CFGR = ((RCC->CFGR & ~(RCC_CFGR_PPRE1)) | RCC_CFGR_PPRE1_DIV2); // set APB1 prescaler to 2 (PCLK1)
RCC->CFGR = ((RCC->CFGR & ~(RCC_CFGR_PPRE2)) | RCC_CFGR_PPRE2_DIV1); // set APB2 prescaler to 1 (PCLK2)

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;  // Enable Port A

// Configure a pin for LED
GPIOA->CRL |= GPIO_CRL_MODE1;
GPIOA->CRL &= ~GPIO_CRL_CNF1;

GPIOA->BSRR |= GPIO_BSRR_BS1;
// Initialize USART1 communication 
usart_init();

while(1){
    char data = usartByteReceive();
    //      usartByteSend(85);
    //      char data = ' ';
    if(data == '1')
    {
        // Turn LED on
        GPIOA->BSRR |= GPIO_BSRR_BS1;
        usartByteSend('F');   // Send F
        usartByteSend('\r');
        usartByteSend('\n');
    }
    else if(data == '0')
    {
        // Turn LED off
        GPIOA->BRR |= GPIO_BRR_BR1;
        usartByteSend('S'); // Send S
        usartByteSend('\r');
        usartByteSend('\n');
    }
    }
}

¿Tienen alguna idea de lo que está mal?

Creo que vale la pena mencionar que quería ver si el micro está enviando algo o no, conecté el usb al módulo serial al USART1 mientras que el bluetooth también estaba conectado al USART1. Después de esto, pude enviar y recibir datos desde el microcontrolador en mi aplicación de Android, pero no pude enviar ni recibir nada en mi computadora a través de usb al módulo en serie.: \

¿Hay algún problema con el voltaje? (He conectado bluetooth a 5v y 3.3v de STM32, no hay diferencia)

    
pregunta dub-dub

0 respuestas

Lea otras preguntas en las etiquetas