日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#【軟件stm32cubeIDE下配置STM32F407uartt調試SBUS模塊-學習筆記-基礎樣例-遙控小車與四軸模板】

  • 1、前言
  • 2、實驗環境以及器材
  • 3、第一步:初步了解SBUS
      • (1)什么是sbus,簡單說說
      • (2)硬件取反
      • (3)基本注意點
  • 4、第二步:制作硬件取反
      • (1)網上硬件圖
      • (2)我的硬件圖
  • 5、第三步:接上串口試試,先不忙寫代碼
  • 6、第四步:代碼實驗
          • (1)軟件基本配置,下載口和時鐘
          • (2)uart1的DMA等配置
          • (3)uart4的配置,用作輸出顯示。
          • (4)時鐘配置,然后生成代碼
          • (5)加入printf,輸出顯示
          • (6)加入uart1的DMA等回調函數
          • (7)打印輸出顯示。
  • 代碼:實驗代碼連接
  • 8、實際效果演示
  • 9、后期細節
    • (1)接收長度27問題
    • (2)判斷斷聯問題,數據接收位【23】位
  • 10、參考連接
      • (1)硬件取反圖,以及基礎知識了解
      • (2)其它人樣例代碼
  • 11、硬件連接
      • (1)三極管以及電阻
      • (2)飛控遙控器

1、前言

最近一段時間在調試飛控遙控器模塊,是基于SBUS,自己在裸機上跑通了,很多細節越值的注意,寫這邊文章也是給自己做個記錄,保持初學者之心,這篇其實跟藍牙那片有相似方式與文章結構。

2、實驗環境以及器材

本次實驗不是只買個藍牙就能解決的,一般幾乎每個人都有一部手機,但不一定沒啥事帶著一套飛控遙控器,而是市面上遙控器又五花八門,本篇針對特定遙控器開發,最文章最后會附上遙控器鏈接。

  • 軟件環境:STM32cubeIDE 1.8.0
  • 硬件環境:STM32F407(正點原子探索者開發板)
  • 一套遙控:HOTRC HT-6A航模遙控器接收機飛控套裝 DIY自制6通道
  • 下載模塊:ST-link下載器 (下載器)
  • 串口模塊:串口轉換器 (可用232模塊代替)
  • 硬件其它物品: 三極管8050,兩個直插電阻4.7K(可以自行更換其它類型)
    實物照片:
  • 3、第一步:初步了解SBUS

    (1)什么是sbus,簡單說說

    翻了一段時間網上的文章后,總結,sbus就是基于串口的一套傳輸協議,就像我們平時使用9600波特率的串口一樣,在使用它時,只是配置上稍微不同。打個比方,就好像鐵軌上能跑綠色鐵皮車,動車組,同樣也能跑高級些的高鐵列車,仔細理解這個比喻,鐵軌沒變,跑的東西,運輸變了。

    (2)硬件取反

    這個很多文章都說了,要硬件取反,而且時必須硬件取反,軟件只能反向數據位,不能反向停止位啥的,所以不要企圖走捷徑,還是老老實實去焊接個反相器吧。

    (3)基本注意點

    在使用sbus時候,和普通串口只有一點配置上的區別.

    • 波特率100K(100000)
    • 停止位 2個
    • 校驗EVEN
    • sbus數據是:以0F開頭,00為結束的。
      如下圖所示(已反向),串口助手打印出來的數據,以及配置,最好每行25bit,方便看。

    4、第二步:制作硬件取反

    (1)網上硬件圖

    這部分網上說挺多了,大部分都大同小異,只有電阻阻值的不同,都是用NPN的8050三級管來做,建議直接網上淘個,具體鏈接也放在后面了。

    (2)我的硬件圖

    以下出自我靈魂的畫手,主要需要注意的是,三極管引腳,不同型號NPN三極管理論上都可以,但是買完后,一定要對下引腳圖,要不可能就不好使,一臉懵逼,如下圖所示。

    5、第三步:接上串口試試,先不忙寫代碼

    同之前測試藍牙一樣,焊借好了后,先不著急寫代碼,先看看有數據過來沒有,接上串口,設置好配置,如下圖,是實際邏輯分析儀抓取到的。上半部分是反向完成的數據,下部分是為反向數據。

    如下圖,是串口抓取到數據。

    你的串口工具基本穩定發送如上數據,那么恭喜你,你基本已經走完一半路程。

    6、第四步:代碼實驗

    完成第三步,可以進行下一步了,使用編譯器寫程序。

    (1)軟件基本配置,下載口和時鐘

    (2)uart1的DMA等配置

    1)波特率100000 9bit EVEN 2STOP

    2)DMA配置

    3)中斷配置

    (3)uart4的配置,用作輸出顯示。

    1)這個想配置DMA就配置不想 普普通通也行,默認就行

    2)中斷配置別忘了

    (4)時鐘配置,然后生成代碼

    (5)加入printf,輸出顯示

    我們需要使用printf,幫我們輸出一些信息,加入printf重定向,具體可以看我之前寫的文章。
    https://waka-can.blog.csdn.net/article/details/124452661?spm=1001.2014.3001.5502
    簡單說,mian.c加入如下代碼

    #include "stdio.h" #include "stdint.h"/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes *//* USER CODE END Includes */ //>>第二步:定義數組 uint8_t u_buf[64];/* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ //>>第三步:定義輸出函數printf #define printf(...) HAL_UART_Transmit((UART_HandleTypeDef * )&huart4, (uint8_t *)u_buf,\sprintf((char *)u_buf,__VA_ARGS__),0x200);
    (6)加入uart1的DMA等回調函數

    具體代碼我就不一一列舉了,如果需要直接去我代碼里去,覺得CSDN要積分的話,可以私信我要代碼。
    (1)初始化聲明下

    (2)回調函數

    (3)加入中斷函數內
    (4)加入轉化函數:通用代碼

    void get_sbus_data(uint8_t sbus_data[27], uint16_t sbus_channel[16]) {sbus_channel[0] = ((sbus_data[1]|sbus_data[2]<<8) & 0x07FF);sbus_channel[1] = ((sbus_data[2]>>3 |sbus_data[3]<<5) & 0x07FF);sbus_channel[2] = ((sbus_data[3]>>6 |sbus_data[4]<<2 |sbus_data[5]<<10) & 0x07FF);sbus_channel[3] = ((sbus_data[5]>>1 |sbus_data[6]<<7) & 0x07FF);sbus_channel[4] = ((sbus_data[6]>>4 |sbus_data[7]<<4) & 0x07FF);sbus_channel[5] = ((sbus_data[7]>>7 |sbus_data[8]<<1 |sbus_data[9]<<9) & 0x07FF);sbus_channel[6] = ((sbus_data[9]>>2 |sbus_data[10]<<6) & 0x07FF);sbus_channel[7] = ((sbus_data[10]>>5|sbus_data[11]<<3) & 0x07FF);sbus_channel[8] = ((sbus_data[12] |sbus_data[13]<<8) & 0x07FF);sbus_channel[9] = ((sbus_data[13]>>3|sbus_data[14]<<5) & 0x07FF);sbus_channel[10] = ((sbus_data[14]>>6|sbus_data[15]<<2|sbus_data[16]<<10) & 0x07FF);sbus_channel[11] = ((sbus_data[16]>>1|sbus_data[17]<<7) & 0x07FF);sbus_channel[12] = ((sbus_data[17]>>4|sbus_data[18]<<4) & 0x07FF);sbus_channel[13] = ((sbus_data[18]>>7|sbus_data[19]<<1|sbus_data[20]<<9)& 0x07FF);sbus_channel[14] = ((sbus_data[20]>>2|sbus_data[21]<<6) & 0x07FF);sbus_channel[15] = ((sbus_data[21]>>5|sbus_data[22]<<3) & 0x07FF);}
    (7)打印輸出顯示。

    代碼:實驗代碼連接

    具體本次代碼連接:https://download.csdn.net/download/qq_22146161/85826413

    8、實際效果演示

    這個視頻還是放在B站了,有興趣可以看下。
    https://www.bilibili.com/video/BV15G411x7TQ/

    9、后期細節

    (1)接收長度27問題

    查看他人編寫的代碼時發現,有uart1接收長度為27位,這個應該都行,只要能順利接收進來就行,也沒必要給太長。

    (2)判斷斷聯問題,數據接收位【23】位

    查看資料時,發現有個判斷斷聯標志位,這個設計非常好,如果在四軸上,一旦的斷聯,基本是損害物品,所以這個位需要注意下,最好查查這個位怎么取,怎么用。

    10、參考連接

    (1)硬件取反圖,以及基礎知識了解

    自己開始也是小白,從他人哪里獲取知識,當然需要標明從哪里獲取。
    參考連接:https://blog.csdn.net/peach_orange/article/details/52958385
    參考連接:https://blog.csdn.net/ReadAir/article/details/102631513

    (2)其它人樣例代碼

    如果你想要keil版本的,在正點原子社區有人做了,自己驗證過,可以的。
    參考連接:http://www.openedv.com/forum.php?mod=viewthread&tid=332860

    11、硬件連接

    (1)三極管以及電阻

    網上某寶非常多:8050三極管等

    (2)飛控遙控器

    網上某寶非常多:飛控遙控:HOTRC HT-6A航模遙控器接收機飛控套裝 DIY自制6通道

    總結

    以上是生活随笔為你收集整理的#【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。