性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

【Rt-thread學(xué)習(xí)記】:設(shè)備篇之uart設(shè)備。。。

猿小A  : 小B快開門,我發(fā)現(xiàn)了你上一篇講的一個大bug,哈哈哈。。。

猿小B  :你發(fā)現(xiàn)什么了。。。

猿小A  : 上次你講的應(yīng)該是pin設(shè)備吧,我仔細研究了一下,并不是所有的驅(qū)動都是注冊到IO設(shè)備管理器中,也有的之注冊到了設(shè)備驅(qū)動層中,像你昨天講的pin設(shè)備。。。

猿小B : 你講的是對的,可那又怎樣呢,構(gòu)架都是我寫的,難免表達會有錯誤。。。

猿小A : ....

猿小B : 這一篇開始講一下用的比較多的uart設(shè)備吧。。。

1111

全部回復(fù)(15)
正序查看
倒序查看
2019-08-23 10:01

猿小B:要講解uart的設(shè)備使用之前,就需要先選擇相應(yīng)的uart端口,這里因為finsh組件占用了uart1端口,所以不能選uart1,這里就需要動手做跟線接入uart2端口,另一端我們選擇接電腦,這樣可以借助串口助手直接進行uart測試和驗證。

猿小A : 開始你的表演。。。

0
回復(fù)
2019-08-23 10:21
@程序小白
猿小B:要講解uart的設(shè)備使用之前,就需要先選擇相應(yīng)的uart端口,這里因為finsh組件占用了uart1端口,所以不能選uart1,這里就需要動手做跟線接入uart2端口,另一端我們選擇接電腦,這樣可以借助串口助手直接進行uart測試和驗證。猿小A:開始你的表演。。。[圖片][圖片][圖片]

猿小B:接下來就是做線,接到板子上,對接串口轉(zhuǎn)接小板,接入電腦,就完成串口通信的硬件部分工作了。

0
回復(fù)
zhifubao
LV.1
4
2019-08-23 11:23
可以打印“HELLO WORLD”了。
0
回復(fù)
2019-08-23 14:19
@程序小白
猿小B:接下來就是做線,接到板子上,對接串口轉(zhuǎn)接小板,接入電腦,就完成串口通信的硬件部分工作了。[圖片][圖片][圖片]

猿小A : 接下來是不是該講講我發(fā)現(xiàn)的問題了,是不?

猿小B :接下來來討論下,你提出的問題,首先那的確是個問題,對比一下兩個sample的代碼就會發(fā)現(xiàn),其接口API的提供者并不來源于同一層,先講一下層的概念,這里的可以理解為4層,每一層其實只是虛化的概念,這里用實體來代替,更好理解一些:

項目工程:                           PIN應(yīng)用                                                                      Uart應(yīng)用

應(yīng)用程序:                          pin_beep_sample                                                      uart_sample.c

I/O設(shè)備管理層:                  無                                                                           device.c

設(shè)備驅(qū)動框架層:                 pin.c                                                                        serial.c

設(shè)備驅(qū)動層:                       drv_gpio.c                                                                drv_usart.c


也就是真的是有的驅(qū)動沒有注冊到device.c 也就是IO設(shè)備管理層,而是通過設(shè)備驅(qū)動框架層直接應(yīng)用,like Pin設(shè)備。


0
回復(fù)
2019-08-23 15:24
@zhifubao
可以打印“HELLOWORLD”了。
那必須的的  
0
回復(fù)
2019-08-23 17:27
@程序小白
猿小A:接下來是不是該講講我發(fā)現(xiàn)的問題了,是不?猿小B:接下來來討論下,你提出的問題,首先那的確是個問題,對比一下兩個sample的代碼就會發(fā)現(xiàn),其接口API的提供者并不來源于同一層,先講一下層的概念,這里的可以理解為4層,每一層其實只是虛化的概念,這里用實體來代替,更好理解一些:項目工程:                          PIN應(yīng)用                                                                     Uart應(yīng)用應(yīng)用程序:                         pin_beep_sample                                                     uart_sample.cI/O設(shè)備管理層:               無                                                                         device.c設(shè)備驅(qū)動框架層:                pin.c                                                                       serial.c設(shè)備驅(qū)動層:                      drv_gpio.c                                                               drv_usart.c[圖片]也就是真的是有的驅(qū)動沒有注冊到device.c也就是IO設(shè)備管理層,而是通過設(shè)備驅(qū)動框架層直接應(yīng)用,likePin設(shè)備。

猿小B:接下來介紹一下uart設(shè)備,IO設(shè)備管理層對外提供的API接口:

1.查找串口設(shè)備

rt_device_t rt_device_find(const char* name);

參數(shù):                                描述:

name                                  設(shè)備名稱

返回                                   ————————————

設(shè)備句柄                             查找到對象設(shè)備將返回相應(yīng)的設(shè)備句柄。

2.打開串口設(shè)備:rt_err_t rt_device_open(rt_device_t dev,rt_uint16_t oflags);

參數(shù):                                 描述:

dev                                      設(shè)備句柄

oflags                                   設(shè)備模式標志

返回                                     ————————————

RT_EOK                                 設(shè)備打開成功

-RT_EBUSY                            如果設(shè)備注冊時指定的參數(shù)中包括RT_DEVICE_FLAG_STANDALONE參數(shù),此                                              設(shè)備將不允許重復(fù)打開

其它錯誤碼                            設(shè)備打開失敗

oflags參數(shù)支持下列取值(可以采用或的方式支持多種取值):

#define RT_DEVICE_FLAG_STREAM                           0X040/*流模式*/

#define RT_DEVICE_FLAG_INT_RX                            0X100/*中斷接收模式*/

#define RT_DEVICE_FLAG_DMA_RX                           0x200/*DMA接收模式*/

#define RT_DEVICE_FLAG_INT_TX                            0X400/*中斷發(fā)送模式*/

#define RT_DEVICE_FLAG_DMA_TX                           0X800/*DMA發(fā)送模式*/

0
回復(fù)
2019-08-26 14:34
@程序小白
猿小B:接下來介紹一下uart設(shè)備,IO設(shè)備管理層對外提供的API接口:1.查找串口設(shè)備rt_device_trt_device_find(constchar*name);參數(shù):                               描述:name                                 設(shè)備名稱返回                                  ————————————設(shè)備句柄                            查找到對象設(shè)備將返回相應(yīng)的設(shè)備句柄。2.打開串口設(shè)備:rt_err_trt_device_open(rt_device_tdev,rt_uint16_toflags);參數(shù):                                描述:dev                                     設(shè)備句柄oflags                                  設(shè)備模式標志返回                                    ————————————RT_EOK                                設(shè)備打開成功-RT_EBUSY                           如果設(shè)備注冊時指定的參數(shù)中包括RT_DEVICE_FLAG_STANDALONE參數(shù),此                                             設(shè)備將不允許重復(fù)打開其它錯誤碼                           設(shè)備打開失敗oflags參數(shù)支持下列取值(可以采用或的方式支持多種取值):#defineRT_DEVICE_FLAG_STREAM                          0X040/*流模式*/#defineRT_DEVICE_FLAG_INT_RX                           0X100/*中斷接收模式*/#defineRT_DEVICE_FLAG_DMA_RX                          0x200/*DMA接收模式*/#defineRT_DEVICE_FLAG_INT_TX                           0X400/*中斷發(fā)送模式*/#defineRT_DEVICE_FLAG_DMA_TX                          0X800/*DMA發(fā)送模式*/

3.控制串口設(shè)備:rt_err_t rt_device_control(rt_device_t dev,rt_uint8_t cmd,void* arg);

參數(shù):                                                  描述:

dev                                                       設(shè)備句柄

cmd                                                      命令控制字,可取值:RT_DEVICE_CTRL_CONFIG

arg                                                        控制的參數(shù),可取類型:struct serial_configure

返回                                                       ————————

RT_EOK                                                  函數(shù)執(zhí)行成功

-RT_ENOSYS                                           執(zhí)行失敗,dev為空

其它錯誤碼                                             執(zhí)行失敗

cmd 和 arg 參數(shù)是被限定的參數(shù),只能是一個值和一種類型。

4.發(fā)送數(shù)據(jù):rt_size_t rt_device_write(rt_device_t dev,rt_off_t pos,const void* buffer,

                                                        rt_size_t size);

參數(shù):                                               描述:

dev                                                    設(shè)備句柄

pos                                                    寫入數(shù)據(jù)偏移量,此參數(shù)串口設(shè)備未使用,默認為0

buffer                                                 內(nèi)存緩沖區(qū)指針,放置要寫入的數(shù)據(jù)

size                                                    寫入數(shù)據(jù)的大小

返回                                                    ——————————

寫入數(shù)據(jù)的實際大小                              如果是字符設(shè)備,返回大小以字節(jié)為單位;

0                                                         需要讀取當(dāng)前線程的errno來判斷錯誤狀態(tài)


0
回復(fù)
2019-08-26 15:12
@程序小白
3.控制串口設(shè)備:rt_err_trt_device_control(rt_device_tdev,rt_uint8_tcmd,void*arg);參數(shù):                                                 描述:dev                                                      設(shè)備句柄cmd                                                     命令控制字,可取值:RT_DEVICE_CTRL_CONFIGarg                                                       控制的參數(shù),可取類型:structserial_configure返回                                                      ————————RT_EOK                                                 函數(shù)執(zhí)行成功-RT_ENOSYS                                          執(zhí)行失敗,dev為空其它錯誤碼                                            執(zhí)行失敗cmd和arg參數(shù)是被限定的參數(shù),只能是一個值和一種類型。4.發(fā)送數(shù)據(jù):rt_size_trt_device_write(rt_device_tdev,rt_off_tpos,constvoid*buffer,                                                       rt_size_tsize);參數(shù):                                              描述:dev                                                   設(shè)備句柄pos                                                   寫入數(shù)據(jù)偏移量,此參數(shù)串口設(shè)備未使用,默認為0buffer                                                內(nèi)存緩沖區(qū)指針,放置要寫入的數(shù)據(jù)size                                                   寫入數(shù)據(jù)的大小返回                                                   ——————————寫入數(shù)據(jù)的實際大小                             如果是字符設(shè)備,返回大小以字節(jié)為單位;0                                                        需要讀取當(dāng)前線程的errno來判斷錯誤狀態(tài)

5.設(shè)置發(fā)送完成回調(diào)函數(shù):rt_err_t rt_device_set_tx_complete(rt_device_t dev,rt_err_t (*tx_done)(rt_device_t,void* buffer));

參數(shù):                                                       描述:

dev                                                            設(shè)備句柄

tx_done                                                      回調(diào)函數(shù)指針

返回                                                            ——————————

RT_EOK                                                       設(shè)置成功

使用DMA發(fā)送模式才會調(diào)用這個回調(diào)函數(shù)

0
回復(fù)
2019-08-26 17:31
@程序小白
5.設(shè)置發(fā)送完成回調(diào)函數(shù):rt_err_trt_device_set_tx_complete(rt_device_tdev,rt_err_t(*tx_done)(rt_device_t,void*buffer));參數(shù):                                                      描述:dev                                                           設(shè)備句柄tx_done                                                     回調(diào)函數(shù)指針返回                                                           ——————————RT_EOK                                                      設(shè)置成功使用DMA發(fā)送模式才會調(diào)用這個回調(diào)函數(shù)[圖片]

6.設(shè)置接收回調(diào)函數(shù):rt_err_t rt_device_set_rx_indicate(rt_device_t dev,rt_err_t(*rx_ind)(rt_device_t dev,rt_size_t size));

參數(shù):                                                        描述:

dev                                                            設(shè)備句柄

rx_ind                                                         回調(diào)函數(shù)指針

dev                                                            設(shè)備句柄(回調(diào)函數(shù)參數(shù))

size                                                             緩沖區(qū)數(shù)據(jù)大小(回調(diào)函數(shù)參數(shù))

返回                                                            ——————————

RT_EOK                                                      設(shè)置成功


該回調(diào)函數(shù)在DMA接收完成和中斷接收一個字節(jié)的數(shù)據(jù)時都會被調(diào)用,這個很重要,有時候官方文檔說的也不是特別清楚。


0
回復(fù)
2019-08-27 09:10
@程序小白
6.設(shè)置接收回調(diào)函數(shù):rt_err_trt_device_set_rx_indicate(rt_device_tdev,rt_err_t(*rx_ind)(rt_device_tdev,rt_size_tsize));參數(shù):                                                       描述:dev                                                           設(shè)備句柄rx_ind                                                        回調(diào)函數(shù)指針dev                                                           設(shè)備句柄(回調(diào)函數(shù)參數(shù))size                                                            緩沖區(qū)數(shù)據(jù)大?。ɑ卣{(diào)函數(shù)參數(shù))返回                                                           ——————————RT_EOK                                                     設(shè)置成功該回調(diào)函數(shù)在DMA接收完成和中斷接收一個字節(jié)的數(shù)據(jù)時都會被調(diào)用,這個很重要,有時候官方文檔說的也不是特別清楚。[圖片]

7.接收數(shù)據(jù):rt_size_t rt_device_read(rt_device_t dev,rt_off_t pos,void* buffer,rt_size_t size);

參數(shù):                                                          描述:

dev                                                                設(shè)備句柄

pos                                                                數(shù)據(jù)讀取偏移量,塊設(shè)備中使用,串口設(shè)備未使用

buffer                                                            緩沖區(qū)指針,讀取的數(shù)據(jù)會被保存在緩沖區(qū)中

size                                                                讀取數(shù)據(jù)的大小

返回                                                              ————————————————

讀到數(shù)據(jù)的實際大小                                         如果是字符設(shè)備,返回大小以字節(jié)為單位

0                                                                  需要讀取當(dāng)前線程的errno來判斷錯誤狀態(tài)。

一般讀取操作配合回調(diào)函數(shù)來使用為佳,因為在讀取之前確保串口緩沖區(qū)的確收到了數(shù)據(jù),這樣可以降低讀數(shù)據(jù)的時間開銷及不需要處理無效數(shù)據(jù)等操作。

8. 關(guān)閉串口設(shè)備:rt_err_t rt_device_close(rt_device_t dev);

參數(shù):                                                    描述:

dev                                                         設(shè)備句柄

返回                                                        ————————

RT_EOK                                                   關(guān)閉設(shè)備成功

-RT_ERROR                                               設(shè)備已經(jīng)完全關(guān)閉,不能重復(fù)關(guān)閉設(shè)備

其它錯誤碼                                                關(guān)閉設(shè)備失敗

有打開設(shè)備,就會有關(guān)閉設(shè)備操作,為了降低誤操作,退出設(shè)備驅(qū)動對于資源的占用,等工作,雖然在這里其實沒什么太大的意義,她遠不如xp一樣的靈活,但是該有的理念還是得有的。


0
回復(fù)
2019-08-27 09:14
@程序小白
7.接收數(shù)據(jù):rt_size_trt_device_read(rt_device_tdev,rt_off_tpos,void*buffer,rt_size_tsize);參數(shù):                                                         描述:dev                                                               設(shè)備句柄pos                                                               數(shù)據(jù)讀取偏移量,塊設(shè)備中使用,串口設(shè)備未使用buffer                                                           緩沖區(qū)指針,讀取的數(shù)據(jù)會被保存在緩沖區(qū)中size                                                               讀取數(shù)據(jù)的大小返回                                                             ————————————————讀到數(shù)據(jù)的實際大小                                        如果是字符設(shè)備,返回大小以字節(jié)為單位0                                                                 需要讀取當(dāng)前線程的errno來判斷錯誤狀態(tài)。一般讀取操作配合回調(diào)函數(shù)來使用為佳,因為在讀取之前確保串口緩沖區(qū)的確收到了數(shù)據(jù),這樣可以降低讀數(shù)據(jù)的時間開銷及不需要處理無效數(shù)據(jù)等操作。8.關(guān)閉串口設(shè)備:rt_err_trt_device_close(rt_device_tdev);參數(shù):                                                   描述:dev                                                        設(shè)備句柄返回                                                       ————————RT_EOK                                                  關(guān)閉設(shè)備成功-RT_ERROR                                              設(shè)備已經(jīng)完全關(guān)閉,不能重復(fù)關(guān)閉設(shè)備其它錯誤碼                                               關(guān)閉設(shè)備失敗有打開設(shè)備,就會有關(guān)閉設(shè)備操作,為了降低誤操作,退出設(shè)備驅(qū)動對于資源的占用,等工作,雖然在這里其實沒什么太大的意義,她遠不如xp一樣的靈活,但是該有的理念還是得有的。

本篇學(xué)習(xí)筆記的結(jié)束,用接收數(shù)據(jù),錯位輸出的例子來結(jié)束吧 ~!

0
回復(fù)
yujunice
LV.5
13
2019-08-28 11:32

finsh組件占用了uart1端口,不能選uart1,

除了你說的手動方式,還有別的方式嗎?

0
回復(fù)
其樂518
LV.2
14
2019-08-28 19:21
@程序小白
本篇學(xué)習(xí)筆記的結(jié)束,用接收數(shù)據(jù),錯位輸出的例子來結(jié)束吧~![圖片]
等到了合適的應(yīng)用場合就會有意義的,一個真實的產(chǎn)品都是由很多小小的知識累積起來的
0
回復(fù)
RainG
LV.1
15
2019-08-30 09:51
打印“HELLO WORLD”了。
0
回復(fù)
2019-08-30 12:17
@yujunice
finsh組件占用了uart1端口,不能選uart1,除了你說的手動方式,還有別的方式嗎?
用ENV工具可以將配置所有功能組件的uart口,不用手動調(diào)整的 
0
回復(fù)
發(fā)