<var id="nn1zj"></var><cite id="nn1zj"><span id="nn1zj"><menuitem id="nn1zj"></menuitem></span></cite>
<ins id="nn1zj"><noframes id="nn1zj"><var id="nn1zj"></var>
<menuitem id="nn1zj"></menuitem>
<ins id="nn1zj"><noframes id="nn1zj"><menuitem id="nn1zj"><span id="nn1zj"><thead id="nn1zj"></thead></span></menuitem>
<cite id="nn1zj"><span id="nn1zj"></span></cite>
<cite id="nn1zj"></cite>
<cite id="nn1zj"></cite>
<menuitem id="nn1zj"><span id="nn1zj"><menuitem id="nn1zj"></menuitem></span></menuitem>
<cite id="nn1zj"><video id="nn1zj"><listing id="nn1zj"></listing></video></cite>
還未設置個性簽名
成為VIP會員 享9項特權: 開通會員

完善資料讓更多小伙伴認識你,還能領取20積分哦, 立即完善>

3天內不再提示

rt-thread 驅動篇(二) serialX 理論實現

出出 ? 來源:出出 ? 作者:出出 ? 2022-06-22 09:03 ? 次閱讀

前言

“serialX” 我起的名字,起個名字想破頭。
在前一篇文章里,大致提出了我的串口驅動框架理論。里面做了一些對串口驅動特性的幻想。也在 NUC970 芯片下通過了中斷模式的實踐驗證。但是,因為 NUC970 的 uart 自帶 fifo 。用它測試效果好,并不能真正說明驅動框架通過驗證了。

然后,緊接著筆者在 STM32F429 完成了中斷和 DMA 兩種模式。今天,我把一些測試結果和移植說明發出來,征求全網公測。

測試配置:DMA 二級緩存 32 個字節,串口收發緩存各 512 字節。

注:本串口驅動工作特性請參閱前一篇文章rt-thread 驅動篇(一) serialX 框架理論

STM32 中斷模式測試

以下是三組連續發收測試:

1. 定時間隔20ms,發送250字節數據,持續發送2600w,接收發送數據量相等

250-20ms-2600w.png

2. 定時間隔50ms,發送250字節數據,持續發送600w,接收發送數據量相等

250-50ms-600w.png

3. 定時間隔80ms,發送1000字節數據,持續發送600w,接收發送數據量相等

1000-80ms-610w.png

注:剛剛跟我們小伙伴求證了一下,串口調試助手的定時間隔是固定周期。如果是這樣的,以上測試是有意義的,如果不是,那就沒達到串口帶寬上限。

STM32 DMA模式測試

1. 讀寫測試,串口調試助手定時 10ms ,發送40字節數據,持續發送129w

dma-40-10ms-129w.png

2. 串口調試助手定時 50ms ,發送500字節數據,持續發送527w

dma-500-50ms-527w.png

3. 串口調試助手定時 40ms ,發送500字節數據,持續發送261w

dma-500-40ms-261w.png

4. 串口調試助手定時 40ms ,發送1000字節數據,持續發送262w

dma-1000-40ms-262w.png

串口調試助手上發送和接收數量不相等,接著我在代碼中添加了個斷點,單獨發送了一個字節 ‘Z’ 。

dma-1000-40ms-262w-rw.png

代碼中接收和發送數量相等,都等于串口調試助手的接收量。這個缺少的部分是串口調試助手發送失敗數量,還是串口驅動接收丟失了?

接下來,修改成中斷接收發送模式,其它不做修改進行相同的測試,也是有數量差。進一步檢查串口驅動里,接收緩存有溢出現象。應用層沒來得及把數據取走,就刪掉了最舊的數據。

接口詳解及移植說明

rtdef.h 添加幾個宏定義

添加阻塞打開相關標志

#define RT_DEVICE_OFLAG_BLOCKING        0x000           /**< blocking io mode */
#define RT_DEVICE_OFLAG_NONBLOCKING     0x004           /**< non-blocking io mode */
...

#define RT_DEVICE_CTRL_BLOCKING         0x05            /**< blocking io */

serialX.h

添加串口驅動緩存和 DMA 二級緩存大小定義(放棄使用 `RT_SERIAL_RB_BUFSZ`):

#ifndef RT_SERIAL_FIFO_BUFSZ
#define RT_SERIAL_FIFO_BUFSZ            512
#endif
#ifndef RT_SERIAL_DMA_BUFSZ
#define RT_SERIAL_DMA_BUFSZ             32
#endif

串口接收和發送使用的緩存大小是一樣的,如果想改變串口緩存大小,請修改 `RT_SERIAL_FIFO_BUFSZ` 的值。

如果想改變 DMA 二級緩存大小,請修改 `RT_SERIAL_DMA_BUFSZ` 的值。

定義一個收發通用 fifo:

struct rt_serial_fifo
{
   rt_uint32_t buf_sz;
   /* software fifo */
   rt_uint8_t *buffer;
   rt_uint16_t put_index, get_index;

   rt_bool_t is_full;
};

重新定義 `rt_serial_device` 定義:

struct rt_serial_device
{
   struct rt_device          parent;
   const struct rt_uart_ops *ops;
   struct serial_configure   config;

   void *serial_rx;   // 串口接收緩存
   void *serial_tx;   // 串口發送緩存

#ifdef RT_SERIAL_USING_DMA       // 串口收發緩存和 DMA 使用的二級緩存分開
   rt_size_t dma_idx_rx;
   rt_uint8_t serial_dma_rx[RT_SERIAL_DMA_BUFSZ]; // DMA 接收緩存
   rt_uint8_t serial_dma_tx[RT_SERIAL_DMA_BUFSZ]; // DMA 發送緩存
#endif

   cb_serial_tx _cb_tx;  // 寫過程回調函數指針
   cb_serial_rx _cb_rx;  // 讀過程回調函數指針

   struct rt_completion completion_tx;    // 發送完成
   struct rt_completion completion_rx;    // 接收到新數據
};
typedef struct rt_serial_device rt_serial_t;

串口驅動通用框架和硬件底層接口定義

struct rt_uart_ops
{
// 用于配置外設寄存器,引腳功能復用,啟用外設等等
   rt_err_t (*configure)(struct rt_serial_device *serial, struct serial_configure *cfg);
   // 用于使能禁用中斷,初始配置 DMA
   rt_err_t (*control)(struct rt_serial_device *serial, int cmd, void *arg);
// 串口外設寫數據寄存器*為空*,把數據放入寫數據寄存器。*不為空*,死等
   int (*putc)(struct rt_serial_device *serial, char c);
   // 串口外設讀數據寄存器*不為空*,讀出讀數據寄存器的值。*為空*,返回 -1
   int (*getc)(struct rt_serial_device *serial);
// 啟動發送,多數是開啟串口外設發送寄存器空中斷
   void (*start_tx)(struct rt_serial_device *serial);
// 結束發送,多數是關閉串口外設發送寄存器空中斷
   void (*stop_tx)(struct rt_serial_device *serial);

#ifdef RT_SERIAL_USING_DMA
// 判斷 DMA 是否在發送過程中,就像上一篇里筆者多次提示的,必須有效檢測 DMA 是否在發送數據中
   rt_bool_t (*is_dma_txing)(struct rt_serial_device *serial);
   // 啟動 DMA 發送
   void (*start_dma_tx)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size);
   // 停止 DMA 發送
   void (*stop_dma_tx)(struct rt_serial_device *serial);
#endif
// 使能串口外設中斷
   void (*enable_interrupt)(struct rt_serial_device *serial);
   // 禁用串口外設中斷
   void (*disable_interrupt)(struct rt_serial_device *serial);
};

移植 serialX 到新芯片上,必須按照 `rt_uart_ops` 的定義實現上述幾個接口。函數功能不能隨意更改。

`rt_hw_serial_isr`

這個中斷只接收 `RT_SERIAL_EVENT_RX_IND` `RT_SERIAL_EVENT_RX_IND` `RT_SERIAL_EVENT_RX_DMADONE` `RT_SERIAL_EVENT_TX_DMADONE` 四種中斷狀態。

  • `RT_SERIAL_EVENT_RX_IND` 接收寄存器不空中斷
  • `RT_SERIAL_EVENT_TX_DONE` 發送寄存器空中斷,為了兼容自帶 fifo 的芯片,event 參數的高三字節代表 fifo 容量
  • `RT_SERIAL_EVENT_RX_DMADONE` 串口接收 DMA 中斷。 這個可以兼容接收半傳輸和全傳輸等多種中斷。event 參數的高三字節代表 DMA fifo 接收數據數量(1-RT_SERIAL_DMA_BUFSZ)。
  • `RT_SERIAL_EVENT_TX_DMADONE` 串口發送 DMA 中斷。這個應該保證 DMA 發送完本次 DMA 緩存中的所有數據,也就是對于 stm32 芯片是 DMA 計數達到 0。

使用注意

  • `RT_SERIAL_FIFO_BUFSZ` `RT_SERIAL_DMA_BUFSZ` 兩個的定義和實際是否合適,小數據量通信可以定義小點兒,數據量大的情況適當調整這兩個值。
  • `rt_uart_ops` 接口定義,功能實現必須匹配。
  • 阻塞模式,收發是一致的。默認是阻塞模式。想使用非阻塞模式請 open 的時候添加 `RT_DEVICE_OFLAG_NONBLOCKING` flag。
  • 使用 `RT_DEVICE_FLAG_INT` `RT_DEVICE_FLAG_DMA_RX` `RT_DEVICE_FLAG_INT_TX` `RT_DEVICE_FLAG_DMA_TX` 四個 open flag 指定收發模式,是用中斷還是 DMA。
  • **特別提醒**,非阻塞模式下,read 可能返回 0。write 返回值可能不是目標寫入 size。read/write 還可能返回 `RT_EXXX` 錯誤值。
  • **特別提醒**,阻塞模式下,read 返回值可能不是期望數據量 size。筆者也曾經提供過可靠處理流數據的方案,詳見 rt-thread 使用寶典(2022-0516更新)

使用完成量進入阻塞漏洞分析

> PS: 謝謝 @HelloBye 的及時糾正,`rt_completion` 不存在本小節描述的漏洞。各位看官可以直接跳過本小節了

串口驅動里有幾個阻塞點,進入阻塞都使用的 `rt_completion` ,如下代碼:

serial->ops->enable_interrupt(serial);
ret = rt_completion_wait(&(serial->completion_rx), RT_WAITING_FOREVER);// 或者 serial->completion_tx

首先開中斷,調用 `rt_completion_wait` 等待完成量進入阻塞。這樣是有個漏洞的,當開中斷后有個串口中斷,中斷處理函數里調用 `rt_completion_done` 是沒有任何反應的,`rt_completion_done` 直接返回退出。

進而回到原線程才執行 `rt_completion_wait`。之后,如果有第二次接收(或發送)中斷發生時才會結束上一次的阻塞。但是,第二次什么時候出現也就是個未知數了。即便前一次可能已經收全了全部想要的數據,但是會不定期阻塞下去。

解決方法有兩個:一、不用永久阻塞,換成 10ms 或者幾 ms 等待;二、用二值信號量替代。

但是!!!我沒有用上述方法中的任何一個進行改進,原因是:

第一種方法無疑要引入一個循環,`rt_completion_wait` 超時返回的時候循環繼續阻塞。還有就是等待時間沒有理論支持。最重要的是用循環方式補漏洞的方式不美觀。

沒使用二值信號量的原因是,rt-thread 的信號量實現沒有真正的“二值”,如果中斷已經多次 release 了,然后應用層才來一次 take,之后還可能成功 take 多次(雖然應該是要阻塞的,但是實際不阻塞,反而會循環 take 多次)。

結束語

現筆者將打碼開放出來 gitee 倉庫 [serialX]( https://gitee.com/thewon/serialX ),求全論壇公測。期待各位大佬提出各種測試方案對它蹂躪。

有問題可以在倉庫里提 [issue]( https://gitee.com/thewon/serialX/issues ) ,或者到 rt-thread 官方論壇上進行討論。

審核編輯:湯梓紅

  • STM32
    +關注

    關注

    1982

    文章

    8044

    瀏覽量

    334770
  • 中斷
    +關注

    關注

    5

    文章

    597

    瀏覽量

    38458
  • 串口驅動
    +關注

    關注

    2

    文章

    63

    瀏覽量

    16462
  • RT-Thread
    +關注

    關注

    28

    文章

    470

    瀏覽量

    34620
收藏 人收藏

    評論

    相關推薦

    【RT-Thread學習筆記】GCC鏈接報錯的排除過程分享

    【RT-Thread學習筆記】GCC鏈接報錯的排除過程分享,一個意想不到的問題。
    的頭像 嵌入式物聯網開發 發表于 07-30 15:08 ? 126次 閱讀
    【RT-Thread學習筆記】GCC鏈接報錯的排除過程分享

    【RT-Thread學習筆記】多彩的printf日志輸出

    如何使用printf輸出彩色的日志信息?
    的頭像 嵌入式物聯網開發 發表于 07-30 14:05 ? 153次 閱讀
    【RT-Thread學習筆記】多彩的printf日志輸出

    【RT-Thread學習筆記】使用objdump反匯編

    如何使用objdump進行反匯編?
    的頭像 嵌入式物聯網開發 發表于 07-30 14:03 ? 117次 閱讀
    【RT-Thread學習筆記】使用objdump反匯編

    【RT-Thread學習筆記】用memwatch排除內存泄露

    【RT-Thread學習筆記】使用memwatch排除內存泄露
    的頭像 嵌入式物聯網開發 發表于 07-30 14:01 ? 119次 閱讀
    【RT-Thread學習筆記】用memwatch排除內存泄露

    【RT-Thread學習筆記】使用hexdump打印字節數組

    【Linux C語言編程】使用hexdump打印字節數組
    的頭像 嵌入式物聯網開發 發表于 07-30 13:59 ? 104次 閱讀
    【RT-Thread學習筆記】使用hexdump打印字節數組

    【RT-Thread學習筆記】如何抓取終端的網絡報文

    【RT-Thread學習筆記】如何抓取終端的網絡報文?
    的頭像 嵌入式物聯網開發 發表于 07-30 13:57 ? 88次 閱讀
    【RT-Thread學習筆記】如何抓取終端的網絡報文

    【RT-Thread學習筆記】Makefile的FORCE

    【RT-Thread學習筆記】十分鐘學會Makefile的FORCE
    的頭像 嵌入式物聯網開發 發表于 07-30 13:55 ? 105次 閱讀
    【RT-Thread學習筆記】Makefile的FORCE

    【RT-Thread學習筆記】Makefile核心基礎知識

    ? 筆者常年在Linux環境編程,經常在項目中與Makefile打交道,最近總結了幾個Makefil....
    的頭像 嵌入式物聯網開發 發表于 07-30 13:53 ? 95次 閱讀
    【RT-Thread學習筆記】Makefile核心基礎知識

    【RT-Thread學習筆記】實現boot跳轉到kernel

    在之前的一篇文章 【C語言】沒想到指針還能這么用 @!!! 中介紹了【函數指針】的基本概念和簡單應用....
    的頭像 嵌入式物聯網開發 發表于 07-30 13:51 ? 138次 閱讀
    【RT-Thread學習筆記】實現boot跳轉到kernel

    【RT-Thread學習筆記】bash和dash-shell

    ? 最近在工作中遇到一個很奇葩的問題,就是一個嵌入式的SDK編譯,它里面執行shell命令的時候,使....
    的頭像 嵌入式物聯網開發 發表于 07-30 13:49 ? 98次 閱讀
    【RT-Thread學習筆記】bash和dash-shell

    【RT-Thread學習筆記】基于Linux的反匯編和棧追溯

    【經驗分享】基于Linux命令行編程環境的棧追溯和反匯編技術實踐分享
    的頭像 嵌入式物聯網開發 發表于 07-30 13:44 ? 158次 閱讀
    【RT-Thread學習筆記】基于Linux的反匯編和棧追溯

    【RT-Thread學習筆記】一種C語言宏定義的寫法

    【RT-Thread學習筆記】一種C語言宏定義的寫法
    的頭像 嵌入式物聯網開發 發表于 07-30 13:41 ? 297次 閱讀
    【RT-Thread學習筆記】一種C語言宏定義的寫法

    【RT-Thread學習筆記】一個固件bin文件變大的原因

    【GCC編譯優化系列】從KEIL轉戰GCC,一個C庫函數讓你的bin文件增大了十幾KB!
    的頭像 嵌入式物聯網開發 發表于 07-30 12:18 ? 242次 閱讀
    【RT-Thread學習筆記】一個固件bin文件變大的原因

    【RT-Thread設計大賽】基于AB32VG1的嵌入式網盤

    【RT-Thread設計大賽】基于AB32VG1的嵌入式移動網盤
    的頭像 嵌入式物聯網開發 發表于 07-30 12:12 ? 285次 閱讀
    【RT-Thread設計大賽】基于AB32VG1的嵌入式網盤

    【我與RT-Thread】榮獲年度論壇之星第4名的感想

    【我與RT-Thread】榮獲年度論壇之星第4名的感想
    的頭像 嵌入式物聯網開發 發表于 07-30 12:06 ? 84次 閱讀
    【我與RT-Thread】榮獲年度論壇之星第4名的感想

    【RT-Thread學習筆記】開源許可協議的核心(思維導圖)

    【開源許可協議】常見開源許可協議的核心內容(思維導圖版本)
    的頭像 嵌入式物聯網開發 發表于 07-30 12:02 ? 254次 閱讀
    【RT-Thread學習筆記】開源許可協議的核心(思維導圖)

    【RT-Thread學習筆記】常見開源許可協議的區別與聯系

    作為一個軟件開發人員,你一定也是天天接觸一些開源軟件,比如一些開源的軟件框架,比如開源的操作系統。這....
    的頭像 嵌入式物聯網開發 發表于 07-30 11:58 ? 253次 閱讀
    【RT-Thread學習筆記】常見開源許可協議的區別與聯系

    【RT-Thread學習筆記】好用高性價比的BLE藍牙抓包器

    作為基于藍牙協議的開發者,少不了各種需要抓包分析藍牙報文的應用場景;而專業的藍牙抓包器非常昂貴,可能....
    的頭像 嵌入式物聯網開發 發表于 07-30 11:45 ? 67次 閱讀
    【RT-Thread學習筆記】好用高性價比的BLE藍牙抓包器

    【RT-Thread設計大賽】2022年應用設計大賽獲獎復盤

    【你又有一個好消息】榮獲2022年國民技術MCU&RT-Thread設計大賽獲獎榜單頭名
    的頭像 嵌入式物聯網開發 發表于 07-30 11:11 ? 92次 閱讀
    【RT-Thread設計大賽】2022年應用設計大賽獲獎復盤

    【RT-Thread學習筆記】RISC-V匯編基礎三大塊知識

    【RT-Thread學習筆記】RISC-V匯編基礎的三大塊知識
    的頭像 嵌入式物聯網開發 發表于 07-30 11:01 ? 214次 閱讀
    【RT-Thread學習筆記】RISC-V匯編基礎三大塊知識

    【RT-Thread學習筆記】ARM匯編基礎的三大塊知識

    【RT-Thread學習筆記】ARM匯編基礎的三大塊知識
    的頭像 嵌入式物聯網開發 發表于 07-30 10:59 ? 237次 閱讀
    【RT-Thread學習筆記】ARM匯編基礎的三大塊知識

    【RT-Thread學習筆記】80x86匯編基礎的三大塊知識

    【RT-Thread學習筆記】80x86匯編基礎的三大塊知識
    的頭像 嵌入式物聯網開發 發表于 07-30 10:57 ? 226次 閱讀
    【RT-Thread學習筆記】80x86匯編基礎的三大塊知識

    【相約2021年RT-Thread RDC】一場國產技術盛宴

    【相約2021年RT-Thread RDC】一場國產技術盛宴
    的頭像 嵌入式物聯網開發 發表于 07-30 10:35 ? 112次 閱讀
    【相約2021年RT-Thread RDC】一場國產技術盛宴

    【我與RT-Thread的故事】我想和你深發展

    【我與RT-Thread的故事】我想和你深發展
    的頭像 嵌入式物聯網開發 發表于 07-30 10:20 ? 77次 閱讀
    【我與RT-Thread的故事】我想和你深發展

    如何基于STM32Cube.AI 從零開始創建AI項目

    NanoEdgeAI是一款端到端工具,允許對數據進行一些預處理,并進行訓練和算法選擇,而STM32C....
    的頭像 意法半導體中國 發表于 07-30 09:31 ? 67次 閱讀

    【RT-Thread學習筆記】真實案例shell腳本運行報錯

    【shell編程掃盲系列】shell腳本運行報錯:syntax error: unexpected ....
    的頭像 嵌入式物聯網開發 發表于 07-30 09:00 ? 273次 閱讀
    【RT-Thread學習筆記】真實案例shell腳本運行報錯

    ADC模數轉換概述與采集實例

      Analog-to-Digital Converter的縮寫。指模/數轉換器或者模擬/數字轉換器....
    發表于 07-29 16:41 ? 100次 閱讀
    ADC模數轉換概述與采集實例

    基于RT-Thread+RA6M4的Lora網關設計方案分享

    1、基于RT-Thread+RA6M4的Lora網關設計 本項目使用RA6M4和Lora模組Ra-01組成簡易Lora網關。網關將接收子設備發送的...
    發表于 07-29 14:39 ? 947次 閱讀

    一文解析STM32、GD32、ESP32差異

    GD32 是國產單片機,據說開發人員來自ST公司,GD32 也是以 STM32 作為模板做出來的。所....
    發表于 07-29 14:19 ? 156次 閱讀

    電量芯片SH366006 I2C接口測試及其程序配置流程

    一、測試環境 開發工具:MDK V5.26.2.0 M2354芯片相關驅動:Nu-Link_Keil_Driver 3.07.7246r RTT開發環境:ENV...
    發表于 07-29 11:33 ? 824次 閱讀

    怎樣去配置基于RT-Thread STM32L475的TF卡呢

    一、硬件 1.潘多拉stm32L475開發板/W25Q128/TF卡64M 二、軟件環境 1.Win10/rt-thread studio2.2.4/rt-thread 4.1.0 三...
    發表于 07-29 11:25 ? 863次 閱讀

    是什么原因導致RT-Thread studio占用內存超標的

    win7 64位系統,rtt studio一直開著,就一個項目,一晚上回來電腦內存超標,卡頓,這個是電腦問題還是studio問題呢? ...
    發表于 07-29 10:59 ? 796次 閱讀

    RT-Thread STM32F103為什么無法使用DAP下載呢

    開始下載程序:2022-07-12 10:00:43 D:\\RT-ThreadStudio>cd /d D:\\RT-ThreadStudio\\repo\\Extract\\Debugger...
    發表于 07-29 10:55 ? 758次 閱讀

    stemwin軟件包支持GUI_OS畫面卻無法顯示怎么解決呢

    官方默認給出的stemwin軟件包都是支持GUI_OS的,只不過對應的庫文件需要自己去官方進行下載,在這里調試過程中出現了如下的...
    發表于 07-29 10:50 ? 751次 閱讀

    潘多拉開發板+RT-Thread Studio選擇按芯片創建無反應請問這是什么原因呢

    請教一個問題。我用正點原子潘多拉開發板+RT-Thread Studio。建立工程時選擇按芯片創建,芯片選的是STM32L475VETx。 ...
    發表于 07-29 10:33 ? 429次 閱讀

    RT-Thread SD卡可以識別到容量但初始化錯誤是何原因

    SD卡可以識別到容量 但初始錯誤 \\ | / RT - Thread Operating System / | \\ 4.1.0 build Jun 6 2022 12:22:19 2...
    發表于 07-29 10:22 ? 377次 閱讀

    使用消息隊列的rt_mq_send參數如果不相同會怎么樣

    求助 1.看論壇的文章里 這里寫的消息隊列不可以直接發變長數據嗎?意思就是使用rt_mq_send函數的時候,size參數必須和rt_mq_...
    發表于 07-29 10:11 ? 501次 閱讀

    將一款單片機程序移植到另一款單片機

    在一些特殊情況下,如成品需要降本,原來的芯片買不到貨,需要將已經做好的產品應用程序有一款單片機移植到....
    發表于 07-29 09:43 ? 132次 閱讀

    多功能STM32開發工具STM32CubeIDE使用指南

    STM32Cube生態系統是ST為STM32開發者打造的軟件生態,是嵌入式開發的利器。
    的頭像 city_prolove 發表于 07-29 09:37 ? 119次 閱讀

    用定時器生成PWM波的方法

    PWM全稱是Pulse Width Modulation,通過控制高頻信號的占空比,眼睛當成低通濾波....
    的頭像 city_prolove 發表于 07-29 09:15 ? 86次 閱讀

    Linux下如何使用中斷的方式來驅動按鍵

    Linux下的按鍵輸入驅動開發模板一文中介紹了基本的按鍵輸入捕獲流程,這里將進一步介紹如何使用中斷的....
    發表于 07-29 08:59 ? 85次 閱讀

    Linux內核中斷設計與實現

    裸機編程中使用中斷比較麻煩,需要配置寄存器、使能IRQ等等。而在Linux驅動編程中,內核提供了完善....
    發表于 07-29 08:57 ? 84次 閱讀

    使用MCU GD32替代STM32的體會

    GD32作為國產MCU里的佼佼者,產品線也比較豐富,是替代STM32的一個很好的選擇。前段時間有個項....
    發表于 07-29 08:53 ? 135次 閱讀

    【RT-Thread學習筆記】結合案例學習調試shell腳本

    【shell編程掃盲系列】結合真實案例學習如何調試shell腳本
    的頭像 嵌入式物聯網開發 發表于 07-29 03:32 ? 455次 閱讀
    【RT-Thread學習筆記】結合案例學習調試shell腳本

    一文解讀內存管理單元 (MMU)

    一般MMU會有一種disable的模式,即不使能MMU,所有虛擬地址都直接映射到相應的物理地址,VA....
    的頭像 冬至配餃子 發表于 07-28 18:09 ? 407次 閱讀
    一文解讀內存管理單元 (MMU)

    制作一個STM32下載器的過程

    本文介紹制作一個STM32下載器的過程。 原理圖 STLINK-V2下載器電路原理圖如下。 上圖中,....
    的頭像 STM32嵌入式開發 發表于 07-28 17:41 ? 129次 閱讀

    RTK GPS航向開源分享

    電子發燒友網站提供《RTK GPS航向開源分享.zip》資料免費下載
    發表于 07-28 14:27 ? 8次 閱讀
    RTK GPS航向開源分享

    帶有stm32的宏鍵盤4x4矩陣

    電子發燒友網站提供《帶有stm32的宏鍵盤4x4矩陣.zip》資料免費下載
    發表于 07-28 14:19 ? 10次 閱讀
    帶有stm32的宏鍵盤4x4矩陣

    帶RTK航向的AutoPilot開源項目

    電子發燒友網站提供《帶RTK航向的AutoPilot開源項目.zip》資料免費下載
    發表于 07-28 10:30 ? 8次 閱讀
    帶RTK航向的AutoPilot開源項目

    STM32原型機開源

    電子發燒友網站提供《STM32原型機開源.zip》資料免費下載
    發表于 07-28 10:15 ? 13次 閱讀
    STM32原型機開源

    通用MCU:挑戰與機遇并存

    從供應鏈角度來看,行業整體交貨期還是較長。ST與客戶密切合作,通過評估替代產品和解決方案,盡量減少對....
    的頭像 STM32單片機 發表于 07-28 09:42 ? 154次 閱讀

    【RT-Thread學習筆記】bash shell -e參數

    bash shell -e參數的含義與用途,你了解嗎?
    的頭像 嵌入式物聯網開發 發表于 07-28 05:20 ? 517次 閱讀
    【RT-Thread學習筆記】bash shell -e參數

    怎樣設計一臺基于單片機的智能裝載運輸工程車

    設計方案首先是電池降壓讓單片機能以一個穩定的電壓工作,同時單片機外圍集成了TTL下載器,方便我們調試....
    發表于 07-27 17:51 ? 167次 閱讀
    怎樣設計一臺基于單片機的智能裝載運輸工程車

    STM32電機控制SDK_v5.x_中文手冊.

    STM32電機控制SDK_v5.x_中文手冊.
    發表于 07-27 15:28 ? 22次 閱讀

    STM32 Pro迷你版開源

    電子發燒友網站提供《STM32 Pro迷你版開源.zip》資料免費下載
    發表于 07-27 15:15 ? 12次 閱讀
    STM32 Pro迷你版開源

    LoRa RAK811 868 MHz w/STM32內置USB記憶棒

    電子發燒友網站提供《LoRa RAK811 868 MHz w/STM32內置USB記憶棒.zip》....
    發表于 07-27 14:40 ? 13次 閱讀
    LoRa RAK811 868 MHz w/STM32內置USB記憶棒

    RT Thread操作系統支持用于端對端通訊數據

    每包數據負載長度最長位14位16384字節。 每幀數據含4字節Header和N字節負載,包含14位數....
    的頭像 冬至配餃子 發表于 07-27 11:57 ? 496次 閱讀
    RT Thread操作系統支持用于端對端通訊數據

    stm32和esp8266上的簡單時鐘

    電子發燒友網站提供《stm32和esp8266上的簡單時鐘.zip》資料免費下載
    發表于 07-27 11:24 ? 9次 閱讀
    stm32和esp8266上的簡單時鐘

    STM32定時器立即進入更新中斷服務程序問題

    我們在基于ST的標準庫或基于CubeMx建立工程,當用到定時器并啟用其更新中斷時,可能會遇到一使能定....
    發表于 07-27 09:13 ? 99次 閱讀
    亚洲色婷婷综合久久