MSP430G2553 conectado al módulo bluetooth HC-06

Configuración del modulo USCI_A0 en modo UART.
1. El USCI_A0.
2. Los pines.
3. Las interrupciones.
4. Envio de datos.
5. Recepción de datos.

1. Configurar el USCI_A0.
Importante: a la hora de configurar la velocidad de transmisión asumo que el microcontrolador trabaja a 16 Mhz.

void configureUSCI_A0 () {
    // Disable USCI
    UCA0CTL1 |= UCSWRST;

    // UCSSEL_2=SMCLK
    //UCSWRST=Enabled. USCI logic held in reset state
    UCA0CTL1 = UCSSEL_2 | UCSWRST;

    // Control de modulación para 16 Mhz
    UCA0MCTL = UCBRF_0 | UCBRS_6;

    // Baud rate
    UCA0BR0 = 130;
    UCA0BR1 = 6;

    // Enable USCI
    UCA0CTL1 &= ~UCSWRST;
}

2. Configurar los pines.

Pin Función Se conecta en el pin del HC-06
P1.1 RX TX
P1.2 TX RX

void configurePins (){
	P1SEL |= BIT1 | BIT2;
	P1SEL2 |= BIT1 | BIT2;
}

3. Configurar las interrupciones.
La idea aquí es dejar el micro en LPM3 y que la interrupción se encargue de despertar al micro cuando se termina de enviar o se recibe un byte.

void configureISR () {
	// clear interrupcion
	IFG2 &= ~(UCA0TXIFG | UCA0RXIFG);

	// isr enabled
	IE2 |= UCA0TXIE | UCA0RXIE;
}

#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR_HOOK(void)
{
	IE2 &= ~UCA0TXIE; // Limpia la interrupción
	__bic_SR_register_on_exit(LPM3_bits); // Sale de LPM3

}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR_HOOK(void)
{
	receivedChar = UCA0RXBUF;
	if (receivedChar == 10) {
		uartEvent = UART_EVENT_CR_RECEIVED;
	} else {
		uartEvent = UART_EVENT_CHAR_RECEIVED;
		buffer[bufferPos++] = receivedChar;
		if (bufferPos == UART_BUFFER_SIZE) bufferPos = (UART_BUFFER_SIZE - 1);
	}

	__bic_SR_register_on_exit(LPM3_bits); // Sale de LPM3

}

4. Envio de datos

void uartSendChar (unsigned char character){
	UCA0TXBUF = character;
	IE2 |= UCA0TXIE;
	LPM3;
}

void uartSendString (const char *str){
	while (*str) {
		uartSendChar(*str++);
	}
}

void uartSendInteger (int number){
	unsigned char strTmp[7];
	itoa (number, strTmp,10);
	uartSendString(strTmp);

}

5. Recepción de datos

unsigned char uartReadChar () {
	LPM3;
	return receivedChar;
}


unsigned char * uartReadString() {
	uartClearBuffer();

	while (1) {
		LPM3;
		if (uartEvent == UART_EVENT_CR_RECEIVED) {
			return buffer;
		}
	}
}


int uartReadInteger (){
	return atoi (uartReadString());
}

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.