|
距離畢設的時間還剩20天左右,這幾天一直忙著做畢設,今天終于將51單片機和串口通信的問題解決了,抽出點時間,寫一下遇到的問題。不然,過幾天又忘了,記錄下來也給后續學習的技術宅能提供一點幫助。
我的串口實驗是:ARM9 控制板通過串口發送一個指令,51接受到這個指令后,根據這個指令控制小車的運行方式。(為什么不用arm9直接控制小車而采用51控制小車呢?
答:我的想法是電機驅動這一塊直接交付給下一級控制器,程序簡單,容易實現,況且通過串口,只需解析一個指令就可以實現)。
1、做此類串口通信一定要記得共地,我采用的方法是直接用5v直流輸出引出了兩個接口,分別為兩個控制板供電,這樣的話串口通訊的電壓沒有一點問題。
2、做串口通訊的一定要搞清楚,你的串口到底那幾個沒被使用,你可以根據廠家提供的電路原理圖查看。選擇好你做串口實驗的串口號。(記得有些串口驅動移植的時候沒有設置為通用串口,你要搞清楚額。)。如果你是在別人移植好的,驅動上做串口應用程序的開發,你要搞清楚,別人的串口名稱。因為時間緊張,串口驅動我沒有自己移植,我是在廠家移植好的驅動上進行應用程序的開發,所以我就可以在 Linux 根目錄下的/dev/查看串口名稱。
我的串口名稱有/dev/s3c2410_serialX(X=0,1,2).. 因此,編寫應用程序的時候一定要注意fd=open(“/dev/此處的串口名稱”,XXXXX);
3、我的51板中本來設置好的運行協議是十六進制的數,后來查看說write函數只能寫字符,我只好用字符常量代替原來的十六進制協議類。調整后的51板程序思路是:
串口接收到字符數據 f=前進,b=后退,l=左轉,r=右轉,s=停止。51板的程序弄好以后,我只要通過arm板給51板發送這些字符,51板就能控制小車的運行方式。
4、Arm linux 串口應用程序的開發,跟windows的差不多,基本都是調用api,然后編寫,不過相比較windows而言,linux更容易理解一個操作系統,因為只有當你把bootloader ,linux kernel,文件系統,驅動這些都移植過一遍,你就很容易理解一個操作系統的原理,也就不難理解調用api 是則么回事類。 串口應用程序的開發就是對串口結構體進行設置。注意串口設置的時候波特率一定要和你51板設置的波特率一致奧,否則不能通信。然后通過讀寫函數對串口進行控制。向串口發送指令是通過Write(fd,buf,sizeof(buf)),函數實現的,我就寫了一個字符f 然后就可以實現小車的前進了。
5、讓我糾結了好長時間的問題。程序寫好以后,一定要用arm-linux-gcc交叉編譯指令,不能用gcc指令編譯,這個編譯的程序只能在pc的linux上跑,不然將編譯好的可執行程序下載到開發板上是不能運行。另外如果你用arm-linux-gcc編譯后生成的可執行文件是a.out文件這個在arm板上也不能運行。必須要用arm-linux-gcc main.c -o myserial這個指令進行編譯,生成的myserial可執行程序才能在arm板上運行。程序下載到開發板以后,一定要加上權限 chmod 777 myserial . 然后執行 ./myserial ,你就可以發現你的小車可以前進了。
|
|