• Arduino Uno, проблема со скоростью UART?

    @leom Автор вопроса
    Кратко о себе
    Проблема оказалась в изначальной инициализации, в памяти регистров UCSR0A-C оказывается мусор, я же предполагал, что там нули.
    Исправил код и все заработало
    #include <avr/io.h>
    
    #define FOSC 16000000 // Clock Speed
    #define BAUD 9600
    #define MYUBRR FOSC/16/BAUD-1
    
    void USART_Init( unsigned int ubrr)
    {
    /*Set baud rate */
    UCSR0A = 0;
    UCSR0B = 0;
    UCSR0C = 0;
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)ubrr;
    /*Enable receiver and transmitter */
    UCSR0B = 1<<TXEN0;
    /* Set frame format: 8data, 1stop bit */
    UCSR0C = 3<<UCSZ00;
    }
    
    void USART_Transmit( char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) )
    ;
    /* Put data into buffer, sends the data */
    UDR0 = data;
    }
    
    void main( void )
    {
    USART_Init(MYUBRR);
    	while(1){
    		USART_Transmit('a');
    	}
    }
    Ответ написан