距離畢設(shè)的時間還剩20天左右,這幾天一直忙著做畢設(shè),今天終于將51單片機(jī)和串口通信的問題解決了,抽出點(diǎn)時間,寫一下遇到的問題。不然,過幾天又忘了,記錄下來也給后續(xù)學(xué)習(xí)的技術(shù)宅能提供一點(diǎn)幫助。
我的串口實(shí)驗(yàn)是:ARM9 控制板通過串口發(fā)送一個指令,51接受到這個指令后,根據(jù)這個指令控制小車的運(yùn)行方式。(為什么不用arm9直接控制小車而采用51控制小車呢?
答:我的想法是電機(jī)驅(qū)動這一塊直接交付給下一級控制器,程序簡單,容易實(shí)現(xiàn),況且通過串口,只需解析一個指令就可以實(shí)現(xiàn))。
1、做此類串口通信一定要記得共地,我采用的方法是直接用5v直流輸出引出了兩個接口,分別為兩個控制板供電,這樣的話串口通訊的電壓沒有一點(diǎn)問題。
2、做串口通訊的一定要搞清楚,你的串口到底那幾個沒被使用,你可以根據(jù)廠家提供的電路原理圖查看。選擇好你做串口實(shí)驗(yàn)的串口號。(記得有些串口驅(qū)動移植的時候沒有設(shè)置為通用串口,你要搞清楚額。)。如果你是在別人移植好的,驅(qū)動上做串口應(yīng)用程序的開發(fā),你要搞清楚,別人的串口名稱。因?yàn)闀r間緊張,串口驅(qū)動我沒有自己移植,我是在廠家移植好的驅(qū)動上進(jìn)行應(yīng)用程序的開發(fā),所以我就可以在 Linux 根目錄下的/dev/查看串口名稱。
我的串口名稱有/dev/s3c2410_serialX(X=0,1,2).. 因此,編寫應(yīng)用程序的時候一定要注意fd=open(“/dev/此處的串口名稱”,XXXXX);
3、我的51板中本來設(shè)置好的運(yùn)行協(xié)議是十六進(jìn)制的數(shù),后來查看說write函數(shù)只能寫字符,我只好用字符常量代替原來的十六進(jìn)制協(xié)議類。調(diào)整后的51板程序思路是:
串口接收到字符數(shù)據(jù) f=前進(jìn),b=后退,l=左轉(zhuǎn),r=右轉(zhuǎn),s=停止。51板的程序弄好以后,我只要通過arm板給51板發(fā)送這些字符,51板就能控制小車的運(yùn)行方式。
4、Arm linux 串口應(yīng)用程序的開發(fā),跟windows的差不多,基本都是調(diào)用api,然后編寫,不過相比較windows而言,linux更容易理解一個操作系統(tǒng),因?yàn)橹挥挟?dāng)你把bootloader ,linux kernel,文件系統(tǒng),驅(qū)動這些都移植過一遍,你就很容易理解一個操作系統(tǒng)的原理,也就不難理解調(diào)用api 是則么回事類。 串口應(yīng)用程序的開發(fā)就是對串口結(jié)構(gòu)體進(jìn)行設(shè)置。注意串口設(shè)置的時候波特率一定要和你51板設(shè)置的波特率一致奧,否則不能通信。然后通過讀寫函數(shù)對串口進(jìn)行控制。向串口發(fā)送指令是通過Write(fd,buf,sizeof(buf)),函數(shù)實(shí)現(xiàn)的,我就寫了一個字符f 然后就可以實(shí)現(xiàn)小車的前進(jìn)了。
5、讓我糾結(jié)了好長時間的問題。程序?qū)懞靡院螅欢ㄒ胊rm-linux-gcc交叉編譯指令,不能用gcc指令編譯,這個編譯的程序只能在pc的linux上跑,不然將編譯好的可執(zhí)行程序下載到開發(fā)板上是不能運(yùn)行。另外如果你用arm-linux-gcc編譯后生成的可執(zhí)行文件是a.out文件這個在arm板上也不能運(yùn)行。必須要用arm-linux-gcc main.c -o myserial這個指令進(jìn)行編譯,生成的myserial可執(zhí)行程序才能在arm板上運(yùn)行。程序下載到開發(fā)板以后,一定要加上權(quán)限 chmod 777 myserial . 然后執(zhí)行 ./myserial ,你就可以發(fā)現(xiàn)你的小車可以前進(jìn)了。
上一篇:2440裸機(jī)編程之十二 GPS
下一篇:ARM9學(xué)習(xí)4-S3C2410的啟動代碼分析-For ADSv1.2
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- stm32與Arduino的比較
- STM32H503開發(fā)(2)----STM32CubeProgrammer燒錄
- STM32簡介 STM32和ARM7的關(guān)系
- stm32屬于arm嗎_arm和stm32的區(qū)別
- STM32調(diào)試神器STM32CubeMonitor介紹
- 基于通過寄存器和調(diào)用庫函數(shù)的方式,對比測試STM32讀寫IO時間
- 基于STM32單片機(jī)通過使用宏assert_param來實(shí)現(xiàn)運(yùn)行時間檢測
- 基于stm32單片機(jī)利用通用定時器輸出PWM
- 工程師STM32單片機(jī)學(xué)習(xí)基礎(chǔ)手記(4):用PWM實(shí)現(xiàn)熒火蟲燈
- 激光雷達(dá)最重要的參數(shù):信噪比
- 十字路口的“金屬休克”:盤點(diǎn)那些智駕系統(tǒng)很難替代人類駕駛員的場景
- IP智能家居控制系統(tǒng)
- 鋰離子電池充電電路設(shè)計
- 手機(jī)中音頻系統(tǒng)抗ESD和EMI干擾設(shè)計
- 北航吳江浩教授團(tuán)隊(duì)研發(fā)的首個具備自主懸停能力的仿蜂鳥微型飛行器
- 基于VMR6512的無線音頻轉(zhuǎn)發(fā)器設(shè)計
- CS7123在電視盒中的應(yīng)用
- AiMOGA墨甲機(jī)器人驚艷亮相印尼車展,加速東南亞智能銷售布局
- LED閃光燈驅(qū)動芯片在照相手機(jī)中的應(yīng)用
- 2025 是德科技數(shù)字月:圍觀拆解百萬示波器!注冊可參與幸運(yùn)抽獎!
- Microchip直播|如何在ADAS系統(tǒng)中解決精密授時挑戰(zhàn)
- 【EEWORLD第三十一屆】2011年10月社區(qū)明星人物揭曉!
- 免費(fèi)樣片申請、技術(shù)干貨|Littelfuse數(shù)據(jù)中心解決方案專區(qū)
- 學(xué)知識,贏好禮|泰克半導(dǎo)體材料與器件測試技術(shù)電源特性篇!
- 新年芯幣競價第二期——開發(fā)板競價
- Quartus Prime設(shè)計軟件15.1版 帶你體驗(yàn)革命性的設(shè)計生涯
- TI嵌入式直播月:深入探究嵌入式產(chǎn)品在工業(yè)和汽車中的新應(yīng)用
- 【1月14日 技術(shù)直播】工程師請就位,Keysight計量專家開講啦 ~電子儀器計量校準(zhǔn)基礎(chǔ)知識與校準(zhǔn)周期探討
- STM32 | 兩塊STM32之間的SPI主從通信實(shí)例
- 1.5.3_und異常模式程序示例
- 1.5.2異常與中斷_CPU模式(Mode)_狀態(tài)(State)與寄存器
- 1.5.1異常與中斷_概念引入與處理流程
- 1.4.3重定位_使用C語言清除BSS段
- 人工智能進(jìn)入高中課本,這題要考
- 大唐移動:SPAN ADT自動路測系統(tǒng)介紹
- 基于FPGA的模擬表頭測試系統(tǒng)設(shè)計
- 基于ip一iq的三相瞬時無功功率理論的三相電路諧波和無功檢
- LabVIEW軟件和NIPXI硬件為并網(wǎng)光伏(PV)設(shè)備快速開發(fā)監(jiān)測系統(tǒng)