问题描述
我正在尝试将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 (将#修改为@)