日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

STM32F407IGHX與Ubuntu20.04虛擬串口通信

發(fā)布者:huanran最新更新時(shí)間:2024-09-18 來(lái)源: elecfans 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

為了讓RobomasterC板(這塊板用的是STM32F407IGHX的芯片)能與上位機(jī)進(jìn)行通訊。我最近翻了不少博客和CSDN文章,看到了很多文章存在一些問(wèn)題,經(jīng)過(guò)了一下午試錯(cuò),我成功實(shí)現(xiàn)了STM32F407IGHX利用STM32CubeIDE進(jìn)行配置并然后用HAL庫(kù)進(jìn)行編程,與安裝有ROS的Ubuntu進(jìn)行虛擬串口通信。


在翻看博客的時(shí)候我發(fā)現(xiàn),RM以及上下位機(jī)通信資料并不多,而且很多已有資料都只講述了實(shí)現(xiàn)原理,卻沒(méi)有講如何具體一步步實(shí)現(xiàn)某個(gè)功能,這就導(dǎo)致初學(xué)者可能在翻看過(guò)程中,越看越懵,反而寫不出一份能用的代碼。


所以這篇文章會(huì)盡可能詳細(xì)的講怎么實(shí)現(xiàn)串口通信,而盡量少講其原理,由于很多文章都已經(jīng)詳盡的寫出了串口通信的原理了,所以我就不在贅述原理而著重于實(shí)現(xiàn)過(guò)程。


此外,我也會(huì)把一些小問(wèn)題和建議寫出來(lái),以便一篇文章就解決所有可能存在的問(wèn)題。


一、概述

1、STM32端(所謂的下位機(jī)):這邊采用的是通過(guò)有圖形化的STM32CubeIDE配置工程,配置好USB-CDC創(chuàng)建一個(gè)虛擬串口,與上位機(jī)通信。

2、Ubuntu端(所謂的上位機(jī)):上位機(jī)是版本20.04的ubuntu,安裝有版本為noetic的ROS,通過(guò)建立一個(gè)ROS節(jié)點(diǎn)來(lái)打開串口并建立通信。

二、STM32端具體實(shí)現(xiàn)過(guò)程

思路:利用STM32CubeIDE配置好USB-CDC,接著修改對(duì)應(yīng)的頭文件,自定義所需的函數(shù)。

1、配置過(guò)程

1)先配置時(shí)鐘RCC,設(shè)置高速時(shí)鐘High Speed Clock為內(nèi)部時(shí)鐘(Crystal/Ceramic Resonator),另一個(gè)暫時(shí)用不到所以不設(shè)置。

pYYBAGPgWCaAB9l7AASa33mKzYc484.png

2)配置下載與調(diào)試(必須設(shè)置,否則會(huì)鎖芯片,到時(shí)候還需要通過(guò)BOOT重啟,比較麻煩)

設(shè)置為Serial Wire,時(shí)鐘為SysTick(當(dāng)然看你到底有什么,如果你擁有的是ST-LINK,那么可以這樣設(shè)置)

poYBAGPgWDOAZuGGAASGDlfWGk8236.png

3)設(shè)置USB模式,打開Connectivity,選擇USB-OYG-FS(快速),選擇Mode的Device_only(從機(jī)模式)。然后點(diǎn)開左下方的NVIC Settings,勾選Enabled,從而能夠開啟中斷。

pYYBAGPgWEmASCHiAANdQFYYRmw168.png

poYBAGPgWF2ATzk1AASexP_Bahw862.pngpoYBAGPgWHeATX2sAATDFUTsjtw656.png

備注:還要返回到NVIC中,設(shè)置USB中斷的優(yōu)先級(jí),這里設(shè)置個(gè)4就行(畢竟沒(méi)有啟動(dòng)其他外設(shè),所以中斷就不需要太嚴(yán)謹(jǐn))、

4)打開MiddleWare,設(shè)置USB的具體工作方式,選擇Class For FS IP的Communication Device Class,即VCP(虛擬串口),其余設(shè)置保持默認(rèn)即可,不需要額外修改。

pYYBAGPgWIWAdc4dAANrUHRyZUc732.png

5)時(shí)鐘樹設(shè)置(時(shí)鐘樹的設(shè)置,需要查閱所使用開發(fā)板的具體原理圖)

例如,RobomasterC板原理圖里是如此說(shuō)明的,所以Input frequency要設(shè)置成12MHz。此外,下方畫紅線部分是USB的時(shí)鐘,USB的時(shí)鐘需要設(shè)置成48MHz才能工作,其余部分看自己的需求。

pYYBAGPgWJKAfkXTAAA8K_syjLo001.pngpYYBAGPgWKGAX5z4AAHFyEnxA58795.png

6)堆棧設(shè)置,堆棧的大小需要足夠大,才能滿足USB初始化的需求,此處設(shè)置Heap Size為0X600即可解決初始化失敗的問(wèn)題,另一個(gè)不用改。

poYBAGPgWK2AUjwQAAFlacL4880476.png

7)到此,所有的初始化已經(jīng)結(jié)束了,只需要Ctrl+s,保存并生成代碼即可,下方兩個(gè)選項(xiàng)均選擇Yes,即可生成STM32CubeIDE工程

pYYBAGPgWLyANge-AAAlH-eZ22M870.png
pYYBAGPgWMiATUvOAAAyikQ1uh0956.png

2、代碼的修改

這里要先打開工程里的USB_DEVICE中的App的usbd_cdc_if.c,重構(gòu)官方給出的代碼,具體內(nèi)容如下

pYYBAGPgWNaAQWTzAAKg8BNXg7g774.png

/* USER CODE BEGIN Header */

/**

  ******************************************************************************

  * @file           : usbd_cdc_if.c

  * @version        : v1.0_Cube

  * @brief          : Usb device for Virtual Com Port.

  ******************************************************************************

  * @attention

  *

  * Copyright (c) 2023 STMicroelectronics.

  * All rights reserved.

  *

  * This software is licensed under terms that can be found in the LICENSE file

  * in the root directory of this software component.

  * If no LICENSE file comes with this software, it is provided AS-IS.

  *

  ******************************************************************************

  */

/* USER CODE END Header */


/* Includes ------------------------------------------------------------------*/

#include 'usbd_cdc_if.h'


/* USER CODE BEGIN INCLUDE */


/* USER CODE END INCLUDE */


/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/


/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/


/* USER CODE END PV */


/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY

  * @brief Usb device library.

  * @{

  */


/** @addtogroup USBD_CDC_IF

  * @{

  */


/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions

  * @brief Private types.

  * @{

  */


/* USER CODE BEGIN PRIVATE_TYPES */


/* USER CODE END PRIVATE_TYPES */


/**

  * @}

  */


/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines

  * @brief Private defines.

  * @{

  */


/* USER CODE BEGIN PRIVATE_DEFINES */

/* USER CODE END PRIVATE_DEFINES */


/**

  * @}

  */


/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros

  * @brief Private macros.

  * @{

  */


/* USER CODE BEGIN PRIVATE_MACRO */


/* USER CODE END PRIVATE_MACRO */


/**

  * @}

  */


/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables

  * @brief Private variables.

  * @{

  */

/* Create buffer for reception and transmission           */

/* It's up to user to redefine and/or remove those define */

/** Received data over USB are stored in this buffer      */

uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];


/** Data to send over USB CDC are stored in this buffer   */

uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];


/* USER CODE BEGIN PRIVATE_VARIABLES */


/* USER CODE END PRIVATE_VARIABLES */


/**

  * @}

  */


/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables

  * @brief Public variables.

  * @{

  */


extern USBD_HandleTypeDef hUsbDeviceFS;


/* USER CODE BEGIN EXPORTED_VARIABLES */


/* USER CODE END EXPORTED_VARIABLES */


/**

  * @}

  */


/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes

  * @brief Private functions declaration.

  * @{

  */


static int8_t CDC_Init_FS(void);

static int8_t CDC_DeInit_FS(void);

static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length);

static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len);

static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);


/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */


/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */


/**

  * @}

  */


USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =

{

  CDC_Init_FS,

  CDC_DeInit_FS,

  CDC_Control_FS,

  CDC_Receive_FS,

  CDC_TransmitCplt_FS

};


/* Private functions ---------------------------------------------------------*/

/**

  * @brief  Initializes the CDC media low layer over the FS USB IP

  * @retval USBD_OK if all operations are OK else USBD_FAIL

  */

static int8_t CDC_Init_FS(void)

{

  /* USER CODE BEGIN 3 */

  /* Set Application Buffers */

  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);

  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);

  return (USBD_OK);

  /* USER CODE END 3 */

}


/**

  * @brief  DeInitializes the CDC media low layer

  * @retval USBD_OK if all operations are OK else USBD_FAIL

  */

static int8_t CDC_DeInit_FS(void)

{

  /* USER CODE BEGIN 4 */

  return (USBD_OK);

  /* USER CODE END 4 */

}


/**

  * @brief  Manage the CDC class requests

  * @param  cmd: Command code

  * @param  pbuf: Buffer containing command data (request parameters)

  * @param  length: Number of data to be sent (in bytes)

  * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL

  */

static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)

{

  /* USER CODE BEGIN 5 */

  switch(cmd)

  {

    case CDC_SEND_ENCAPSULATED_COMMAND:


    break;


    case CDC_GET_ENCAPSULATED_RESPONSE:


    break;


    case CDC_SET_COMM_FEATURE:


    break;


    case CDC_GET_COMM_FEATURE:


    break;


    case CDC_CLEAR_COMM_FEATURE:


    break;


  /*******************************************************************************/

  /* Line Coding Structure                                                       */

  /*-----------------------------------------------------------------------------*/

  /* Offset | Field       | Size | Value  | Description                          */

  /* 0      | dwDTERate   |   4  | Number |Data terminal rate, in bits per second*/

  /* 4      | bCharFormat |   1  | Number | Stop bits                            */

  /*                                        0 - 1 Stop bit                       */

  /*                                        1 - 1.5 Stop bits                    */

  /*                                        2 - 2 Stop bits                      */

  /* 5      | bParityType |  1   | Number | Parity                               */

  /*                                        0 - None                             */

  /*                                        1 - Odd                              */

  /*                                        2 - Even                             */

  /*                                        3 - Mark                             */

  /*                                        4 - Space                            */

  /* 6      | bDataBits  |   1   | Number Data bits (5, 6, 7, 8 or 16).          */

[1] [2]
引用地址:STM32F407IGHX與Ubuntu20.04虛擬串口通信

上一篇:STM32微控制器的技術(shù)特點(diǎn)和性能指標(biāo)
下一篇:基于STM32單片機(jī)的防丟失手環(huán)系統(tǒng)設(shè)計(jì)

推薦閱讀最新更新時(shí)間:2025-07-04 02:54

Greenconn GC04系列浮動(dòng)連接器,實(shí)現(xiàn)6A電流與8Gbps數(shù)據(jù)傳輸?shù)淖吭叫阅?/a>
浮動(dòng)連接器應(yīng)用在自動(dòng)組裝過(guò)程中,可解決基板對(duì)準(zhǔn)誤差,它們最常用于密集結(jié)合多個(gè)基板的設(shè)備。 目前,Greenconn開發(fā)的浮動(dòng)連接器系列pitch包含0.5mm,0.635mm,0.8mm, 支持6.3mm到30mm的合高范圍,廣泛應(yīng)用于自動(dòng)組裝,以及汽車、工業(yè)等高震動(dòng)環(huán)境中。其雙觸點(diǎn)設(shè)計(jì)對(duì)于震動(dòng)中連接器所發(fā)生位移,提供了靈活的誤差容許。 Greenconn最新推出的GC04系列浮動(dòng)板對(duì)板連接器,采用0.5mm間距設(shè)計(jì),獨(dú)特的電源端子與信號(hào)端子混合結(jié)構(gòu),可實(shí)現(xiàn)高達(dá)6A的電流傳輸和8Gbps的高速數(shù)據(jù)傳輸。 GC04系列浮動(dòng)連接器的浮動(dòng)端GGAC201-B003和固定端CGAC204-B001組合,可支持最大20mm的合
[工業(yè)控制]
Greenconn GC<font color='red'>04</font>系列浮動(dòng)連接器,實(shí)現(xiàn)6A電流與8Gbps數(shù)據(jù)傳輸?shù)淖吭叫阅? /></a>					</div>
										<div   id= Mvsilicon山景AP8064/AP8048B DSP芯片適用USB聲降噪麥肯風(fēng)
AP8064/AP8048B 作為一個(gè)高度集成的用于音頻應(yīng)用處理的SOC,AP8064/AP8048B集成了ARMCortex-M3、OTG、SD/MMC卡控制器、SARADC、音頻DAC、音頻ADC、段式LCD顯示驅(qū)動(dòng)程序、RTC和IR解碼器。AP8064支持藍(lán)牙堆棧、各種音頻解碼器、編碼器和效果。通常,AP8064提供了低功耗、靈活和更強(qiáng)大的無(wú)線音頻播放器解決方案。 -LQFP 48、64封裝 -ARM Cortex- M3內(nèi)核,運(yùn)行頻率96MHz -Free RTOS 操作系統(tǒng) (Keil編譯器工具) -支持串行兩線(SWD)調(diào)試接口,在線調(diào)試&仿真 -128K字節(jié)SRAM -Flash程序可通過(guò)USB & SD d
[嵌入式]
Mvsilicon山景AP8064/AP8<font color='red'>04</font>8B DSP芯片適用USB聲降噪麥肯風(fēng)
大族激光:2021年凈利潤(rùn)20.01億元 同比增漲104.47%
2月27日,大族激光披露2021年業(yè)績(jī)快報(bào),報(bào)告期內(nèi),公司實(shí)現(xiàn)營(yíng)業(yè)總收入163.17億元,同比增長(zhǎng)36.63%;凈利潤(rùn)20.01億元,同比增長(zhǎng)104.47%;基本每股收益1.9元。 據(jù)大族激光表示,報(bào)告期內(nèi)公司經(jīng)營(yíng)業(yè)績(jī)較上年度大幅增長(zhǎng),原因如下: 1、公司2021年度各項(xiàng)主營(yíng)業(yè)務(wù)有序開展,下游消費(fèi)電子、高功率激光加工等領(lǐng)域設(shè)備需求旺盛,產(chǎn)品訂單較上年度保持穩(wěn)定增長(zhǎng)。通過(guò)深化改革,落實(shí)公司“基礎(chǔ)器件技術(shù)領(lǐng)先,行業(yè)裝備深耕應(yīng)用”的發(fā)展戰(zhàn)略,持續(xù)加大行業(yè)專用設(shè)備業(yè)務(wù)的研發(fā)和投入,PCB行業(yè)專用設(shè)備、新能源動(dòng)力電池行業(yè)專用設(shè)備、Miniled專用設(shè)備、Led封裝設(shè)備等業(yè)務(wù)訂單及發(fā)貨均較上年大幅增長(zhǎng)。 2、2021年公司營(yíng)業(yè)總收入163.
[手機(jī)便攜]
一文了解《汽車駕駛自動(dòng)化分級(jí)》(GB/T 40429-2021)
汽車技術(shù)的發(fā)展促使自動(dòng)駕駛汽車概念逐步成為現(xiàn)實(shí),自動(dòng)駕駛汽車的普及將是必然結(jié)果,在不久的將來(lái),自動(dòng)駕駛汽車將改變?nèi)藗兊某鲂蟹绞?。然而在自?dòng)駕駛技術(shù)迅速發(fā)展、產(chǎn)業(yè)模式不斷走向成熟、車企產(chǎn)量計(jì)劃全面提上日程的今天,我國(guó)對(duì)于自動(dòng)駕駛的分類還沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),很多車企在自動(dòng)駕駛設(shè)計(jì)及宣傳中,參照的是由國(guó)際自動(dòng)機(jī)工程師學(xué)會(huì)(SAE-International)發(fā)布的SAE J3016標(biāo)準(zhǔn)。 2021年8月20日,由工業(yè)和信息化部提出、全國(guó)汽車標(biāo)準(zhǔn)化技術(shù)委員會(huì)歸口的GB/T 40429-2021《汽車駕駛自動(dòng)劃分級(jí)》推薦性國(guó)家標(biāo)準(zhǔn)(以下簡(jiǎn)稱:標(biāo)準(zhǔn))由國(guó)家市場(chǎng)監(jiān)督管理總局、國(guó)家標(biāo)準(zhǔn)化管理委員會(huì)批準(zhǔn)發(fā)布(國(guó)家標(biāo)準(zhǔn)公告2021年第11號(hào)文),該標(biāo)
[嵌入式]
一文了解《汽車駕駛自動(dòng)化分級(jí)》(GB/T 4<font color='red'>04</font>29-2021)
本田將在今年試生產(chǎn)固態(tài)電池產(chǎn)品 2040年實(shí)現(xiàn)全電動(dòng)化
近日,根據(jù)外媒報(bào)道,本田在上周五表示,其目標(biāo)是道2040年實(shí)現(xiàn)產(chǎn)品零排放,其中純電動(dòng)汽車和氫燃料汽車將發(fā)揮作用。 本田這一目標(biāo)相比競(jìng)爭(zhēng)對(duì)手所設(shè)定的目標(biāo)來(lái)說(shuō)都要更晚,上周凱迪拉克剛剛表示,到2030年就將實(shí)現(xiàn)全電動(dòng)化,而捷豹汽車更早,將這個(gè)目標(biāo)時(shí)間提前到了2025年。本田在電動(dòng)化方面一直落后競(jìng)爭(zhēng)對(duì)手,并且在純電動(dòng)產(chǎn)品上也并沒(méi)有特別大的突破,其Clarity Electric車總在幾年前的續(xù)航里程只有89英里。 到目前,本田汽車也并無(wú)太多的新能源產(chǎn)品布局。根據(jù)消息,距離我們最近的一款產(chǎn)品將是根據(jù)通用BEV3平臺(tái)打造而來(lái)的一款謳歌品牌純電動(dòng)車。根據(jù)消息,這款車型將在2023年開始在墨西哥拉莫斯·阿里茲佩(Ramo
[汽車電子]
本田將在今年試生產(chǎn)固態(tài)電池產(chǎn)品 2<font color='red'>04</font>0年實(shí)現(xiàn)全電動(dòng)化
PIC16F877A單片機(jī)接收BA5104紅外線遙控解碼程序
//熟悉使用單片機(jī)進(jìn)行紅外線遙控解碼 //1、首先根據(jù)BA5104遙控IC的編碼形式進(jìn)行解碼 //2、把解碼出來(lái)的按鍵用LED指示 //************************************************** //************************************************** //硬件設(shè)置: //1、SW1開關(guān)2閉合,其他斷開 //2、SW2開關(guān)1閉合,其他斷開 //3、SW4開關(guān)全部閉合 //************************************************** //******************************
[單片機(jī)]
“HSFPAR系列”推出耐沖擊性更強(qiáng)的“HSFPAR004A”
阿爾卑斯阿爾派株式會(huì)社(TOKYO:6770、社長(zhǎng):栗山年弘、總部:東京(以下簡(jiǎn)稱“阿爾卑斯阿爾派”)在力傳感器“HSFPAR系列”中新推出了耐沖擊性更強(qiáng)的“HSFPAR004A”。已于今年3月開始量產(chǎn)。 近年來(lái),電子黑板和平板電腦開始被廣泛應(yīng)用于學(xué)校教學(xué)和公司會(huì)議等場(chǎng)合。受此趨勢(shì)影響,多用于數(shù)字繪圖等創(chuàng)作用途的筆型輸入設(shè)備(觸控筆)的需求增加。 觸控筆上裝有力傳感器,用來(lái)捕捉筆尖的軌跡,并根據(jù)筆壓重現(xiàn)線條的粗細(xì)。我公司一直量產(chǎn)和銷售至今的行業(yè)最小等級(jí)(注1)的力傳感器“HSFPAR系列”,憑借其高分辨率和高線性度,獲得了客戶的好評(píng)。但是,觸控筆不小心掉落,傳感器(壓扣(注2))無(wú)法耐受沖擊而損壞的情況也時(shí)有發(fā)生。
[傳感器]
“HSFPAR系列”推出耐沖擊性更強(qiáng)的“HSFPAR0<font color='red'>04</font>A”
凌華科技DSP脈沖式運(yùn)動(dòng)控制卡AMP-204C/208C
備受業(yè)界矚目的年度權(quán)威最佳產(chǎn)品評(píng)選活動(dòng)-——CONTROL ENGINEERING China 2013年最佳產(chǎn)品獎(jiǎng)近日在上海工博會(huì)揭曉,并在上海證大麗笙酒店隆重舉行了CONTROL ENGINEERING China十周年慶暨2013年度最佳產(chǎn)品獎(jiǎng)?lì)C獎(jiǎng)典禮。在近3個(gè)月的評(píng)選活動(dòng)上,機(jī)器視覺(jué)與運(yùn)動(dòng)控制的整合專家凌華科技發(fā)布的高性價(jià)比的新一代DSP脈沖式運(yùn)動(dòng)控制卡AMP-204C/AMP-208C在31家同行業(yè)企業(yè)中脫穎而出,斬獲了電機(jī)驅(qū)動(dòng)與運(yùn)動(dòng)控制類最佳產(chǎn)品獎(jiǎng)。 作為業(yè)界最具權(quán)威的評(píng)選活動(dòng)之一,本次產(chǎn)品針對(duì)產(chǎn)品技術(shù)創(chuàng)新性、產(chǎn)品市場(chǎng)影響力、產(chǎn)品用戶友好型和產(chǎn)品相關(guān)服務(wù)性四大標(biāo)準(zhǔn)嚴(yán)格評(píng)選出來(lái)。凌華科技獲得的最佳產(chǎn)品獎(jiǎng)不僅充分說(shuō)明了凌
[工業(yè)控制]
凌華科技DSP脈沖式運(yùn)動(dòng)控制卡AMP-2<font color='red'>04</font>C/208C
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved