Урок 4.1: Работаем с UART'ом (делаем конвертер уровней и соединяемся с ПК)
На этом уроке мы научимся обмениваться данными через интерфейс uart. Одно из основных применений этого интерфейса - взаимодействие ПК и микроконтроллера. Мы создадим простейшую программу для микроконтроллера, которая будет обмениваться данными с ПК.
Для начала рассмотрим как это делать без штатных библиотек:
uart_without_libs.c: <source lang="c">#include <avr/io.h>
- include <stdint.h>
void usart0_init( uint32_t baudrate ); void usart0_putchar( uint8_t data ); uint8_t usart0_getchar( void ); void usart0_putstr( char *str ); void usart0_getstr( char *str, uint8_t length ) ;
void usart0_init( uint32_t baudrate ) {
uint16_t bauddiv = ( ( F_CPU + ( baudrate * 8L ) ) / ( baudrate * 16L ) - 1 ); UBRRL |= bauddiv; UBRRH |= ( bauddiv >> 8 ); UCSRB |= ( 1 << TXEN ) | ( 1 << RXEN );
}
void usart0_putchar( uint8_t data ) {
while( !( UCSRA & ( 1 << UDRE ) ) );
UDR = data;
}
uint8_t usart0_getchar( void ) {
while( !( UCSRA & ( 1 << RXC ) ) ); return UDR;
}
void usart0_putstr( char *str ) {
while( *str ) usart0_putchar( *str++ );
}
void usart0_getstr( char *str, uint8_t length ) {
while( length ) { *str = usart0_getchar(); if( *str == 'n' || *str == 'r' ) break; str++; length--; }
}
int main( void ) {
char tmp_str[] = "Hello, world!nr"; usart0_init( 9600 ); usart0_putstr( tmp_str ); while( 1 ) { char buffer[64] = { 0 }; usart0_getstr( buffer, 64 ); usart0_putstr( buffer ); } return 0;
}</source>
А теперь как с использованием штатной библиотеки:
uart_with_lib.c: <source lang="c">тут будет пример</source>