Raspberry Pi3 ~ C語言控制串口


  注明出處:http://www.cnblogs.com/einstein-2014731/p/5551846.html

  使用C語言控制樹莓派3B的串口,實現使用串口收發數據的目的。之前以為這個串口是被默認配制成serial控制樹莓派的模式,

其實安裝最新的NOOBS后是默認的serial0,而我們用的是ttyAMA0,還有的說這個和Pi3的板載藍牙沖突,兩者不能同時使用,

對此目前還沒試過兩者全開的情況。如果兩者不能同時使用豈不是很坑爹。

【1】 首先查看 /boot/overlays/ 目錄下有沒有 pi3-miniuart-bt-overlay.dtb 這個

         文件,如果有,那么就是已經把硬件串口重新分配給了GPIO。

然后查看下 /boot/cmdline.txt這個文件,我的內容如下:           


otg.lpm_enable=0 console=serial0,115200     console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline     fsck.repair=yes rootwait

可以看到console=serial0 用的是serial0 控制模式並非ttyAMA0。這里也不要改

【2】安裝wiringPi ,前面已經提到過,安裝之后查看GPIO的引腳分配。引腳圖如下:

【3】按照圖連線,TxD也就是8腳接在MAX232的RX上RxD接在TX上,將TTL電平轉成RS232電平使電腦可以識別。

【4】eclipse中編寫代碼

#include <wiringSerial.h>
int main(void)
{
    int fd;
    if((fd = serialOpen ("/dev/ttyAMA0",9600))<0)
    {
        printf("serial err\n");
    }
    while(1)
    {
        UartBuff[0]=serialGetchar(fd);
        if(UartBuff[0]=='a')
        {
         serialPutchar(fd,UartBuff[0]);
        }
        sleep(0.5);
    }
    return EXIT_SUCCESS;

 

首先從串口接收數據,然后如果接收的是字符a,那么在把接收到的a發回去。

WiringPi關於串口函數如下,可以按照需求使用。

extern int   serialOpen      (const char *device, const int baud) ;
extern void  serialClose     (const int fd) ;
extern void  serialFlush     (const int fd) ;
extern void  serialPutchar   (const int fd, const unsigned char c) ;
extern void  serialPuts      (const int fd, const char *s) ;
extern void  serialPrintf    (const int fd, const char *message, ...) ;
extern int   serialDataAvail (const int fd) ;
extern int   serialGetchar   (const int fd) ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM