#c #atmega
Вопрос:
#include <atmel_start.h>
#include <util/delay.h>
#include <avr/io.h>
#define F_CPU 8000000
#define BAUD 9600
#define BRC ((F_CPU/(16UL * BAUD)) - 1)
void USART_Transmit_2( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR2A amp; (1<<UDRE2)) )
;
UDR2 = data;/* Put data into buffer, sends the data */
PORTB = 0b00100000; /* Turn on first LED bit/pin in PORTB */
_delay_ms(500); /* wait */
PORTB = 0b00000000; /* Turn off all B pins, including LED */
_delay_ms(500);
}
void USART_init_2(void){
UBRR2H = (BRC >> 8);
UBRR2L = BRC;
UCSR2B = (1 << TXEN2) | (1 << RXEN2);
UCSR2C = (1 << UCSZ21) | (1 << UCSZ20);
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
//atmel_start_init();
USART_init_2();
DDRB = 0b00000001;
/* Replace with your application code */
while (1) {
USART_Transmit_2('h');
_delay_ms(1000);
}
}
Это мой код barebone, я не могу понять, почему с pin-кода не поступает сигнал. На TX сигнал всегда высокий.
индикаторы в USART_Transmit_2 действительно включаются и выключаются.
Любая помощь будет очень признательна.
Комментарии:
1. раскомментировать
atmel_start_init();
?2. на данный момент я им не пользуюсь, даже без комментариев это мало что меняет
3. @displayer Включите светодиод ровно на 500 мс, а затем на 500 мс выключите? Если нет, то это может быть возможно из-за неправильной настройки байтов предохранителя. В режиме по умолчанию (отправка) запрограммирован внутренний генератор 8 МГц с предустановкой 8 (
CKDIV8
). Таким образом, у вас есть только 1 МГц, а процедуры задержки занимают больше 500 мс. Также UART не работает с неверными значениями UBRR. Пожалуйста, вы можете проверить эти настройки?4. Я проверил, и светодиод включается на 250 мс и выключается на 250 мс, значения UBRR правильные.
5. мои предохранители таковы:
extended=0xFD
,HIGH=0xD0
,LOW=0xFF
Ответ №1:
так что я полный дурак, почему-то я не проверял правильный канал, код работает так, как на rx/tx 3, а не на rx/tx 2. не совсем уверен, почему, поскольку в таблице данных говорится об обратном, но, эй, теперь он работает.