在arduino上编程atmega328p的UART
Programming atmega328p's UART on arduino
我直接对其Atmega328p的串行通信寄存器进行编程(我知道Arduino中有一个现成的串行通信库,但我想尝试对Atmega328p进行编程)。
我试图通过使用Arduino的TX PIN将字符" A"发送到串行LCD。我已经在线提到了几个资源,并得出了以下代码:
#define BAUDRATE(BAUD) (((F_CPU/(BAUD*16UL)))-1)
class serials
{
serials()
{
UBRR0H = BAUDRATE(9600) >> 8;
UBRR0L = BAUDRATE(9600);
UCSR0A &= ~_BV(U2X0);
UCSR0B |= _BV(TXEN0) | _BV(RXEN0);
UCSR0C |= _BV(UCSZ00) | _BV(UCSZ01);
}
void transmit(unsigned char);
};
void serials::transmit(unsigned char data)
{
loop_until_bit_is_clear(UCSR0A,UDRE0);
UDR0 = data;
}
void loop()
{
serials lcdtransmit;
lcdtransmit.transmit(254);
lcdtransmit.transmit(1);
lcdtransmit.transmit(254);
lcdtransmit.transmit(128);
lcdtransmit.transmit('a');
while(1);
}
但是,当我运行此代码时,
- LCD显示器上没有输出。
- TX引脚总是很高。
- 当不存在
while(1)
时,似乎在" TX PIN"处输出,但在LCD显示屏上没有输出。
为串行传输编写的代码中是否存在任何错误?
鉴于您在Arduino上使用了328p,您应该假设启动加载程序在达到代码之前已经写入UART寄存器。因此,UCSR0B和UCSR0C寄存器应完全分配,而不仅仅是在设定的位中掩盖。
相关文章:
- 正确调度消息 UART
- Uart没有在C++中阅读整个消息
- Ardunio Uart class & Libraries
- C 通过 UART 将结构发送到 Python
- 在 Linux 上从 UART 进行阻塞读取()
- Linux C++读取 UART 设备无法始终如一地工作
- UART在Gem5中与手臂裸机中的通信
- ESP8266和ATMEGA328P之间的串行通信
- 捕获自定义 UART 类信号
- ATMega328P 和 ESP8266ex 之间的 I2c 通信只能发送 8 个字节,错误?
- 读取到UART流 - 数据块
- C++ UART Infite loop with the TI-Nspire
- 在arduino上编程atmega328p的UART
- UART上的串行数据已损坏
- UART qt到微控制器,无法正确发送数据
- 在Linux上使用C/C++中的write()函数通过UART Beaglebone Black写入70kB
- 在微控制器上编写 UART 控制台时出现 UTF-8 问题
- ATMega328p:通过USART发送字节的奇怪行为
- 在Qt5中通过uart发送一个大的缓冲区
- 基于多个终止字符从UART收集数据