UART的使用可以參考http://tomyam-yang.blogspot.com/2017/06/arduino-timer-as-counter.html
要在arduino主程式使用c函式庫,需要把函式庫放在arduino/libraries資料夾下。
並在主程式使用extern "C"{} include 函式
我在libraries底下建一個資料夾放我的.c與.h檔,分別是io.h、iom328p.h、serial.c、serial.h
io.h與iom328p.h是內建的,是定義arduino uno r3的參數,但當你使用自建c函式庫驗證會找不到,所以就把它放進來同一個資料夾內。
底下的程式是自建uart程式,bitrate:9600。
主要副程式
void uart9600_setup(); //初始設定
void serial_put(char *string); //輸出字串
char serial_get(void);//取的字元
void serial_putchar(char string);//輸出字元
主程式:
extern "C"{ #include <serial.h> } char rechchar; char message[]="Hello World"; void setup() { // put your setup code here, to run once: uart9600_setup(); serial_put(message); } void loop() { rechchar=serial_get(); }serial.c
#include <iom328p.h> #include <io.h> void serial_put(char *string) { while(*string) { while(!(UCSR0A & 0b00100000)) { } UDR0=*string++; } } void serial_putchar(char string) { while(!(UCSR0A & 0b00100000)) { } UDR0=string; } char serial_get() { char recchar; while(!(UCSR0A & 0b10000000)) { } recchar=UDR0; //UDR0=*recchar; serial_putchar(recchar); return recchar; } void uart9600_setup() { //unsigned int baud_setting=103; UBRR0H=(unsigned char)0; UBRR0L=(unsigned char)103; UCSR0B=0B00011000;//啟動接收中斷、啟動傳送接收 UCSR0C=0B00000110; } ISR(USART_RX_vect) { char ReceivedChar; ReceivedChar=UDR0; UDR0=ReceivedChar; }serial.h
void uart9600_setup(); void serial_put(char *string); char serial_get(void); void serial_putchar(char string);
沒有留言:
張貼留言