与蓝牙连接atmega328p的问题

问题描述

我正在尝试将atmega328p与Blutooth HC-0接口。 我遵循USART部分的Atmega328P数据表中的示例。 该代码只是试图向手机上的蓝牙终端发送字母'b'并接收字母。如果收到的字母为'a',则PORTB0上的LED会亮起,如果字母为'c',则LED会熄灭。但不幸的是,什么都没有。

atmega328P与HC-05之间的连接如下:

HC-05 -> Atmega328P 
RXD -> pin3
TXD -> pin2
GND -> pin8
VCC -> pin7

蓝牙灯点亮和熄灭,并且已成功连接到手机,但没有接收到数据,并且当发送字母'a'和'c'时,连接到PORTB0的LED指示灯没有任何反应。

代码显示在这里。谢谢您的帮助!

#define F_cpu 16000000UL // Clock Speed
#define BAUD 9600
#define MYUBRR F_cpu/16/BAUD-1

#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

char data;
char data2 = 'b';

void USART_Init(unsigned int ubrr)
{
    /* Set baud rate */
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)(ubrr);
    
    /* Enable receiver and transmitter */
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
    
    /* Set frame format: 8data,2stop bit */
    UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

char USART_Receive(void)
{
    /* Wait for data to be received */
    while ( !(UCSR0A & (1<<RXC0)) );
    /* Get and return received data from buffer */
    return UDR0;
}

void USART_Transmit(char data)
{
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) );
    /* Put data into buffer,sends the data */
    UDR0 = data;
}

int main(void)
{
    DDRB  = 0b00000001;
    PORTB = 0b00000000;
    USART_Init(MYUBRR);
    while (1) {
        data = USART_Receive();
        USART_Transmit(data2);
        if (data == 'a') {
            PORTB = 0b00000001;
        } else if (data == 'c') {
            PORTB = 0b00000000;
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)