2016-01-22 273 views
4

背景帶有HAL庫的STM32F4-Discovery(STM32F429ZIT6)上的RS232(UART)?

這裏是我的一些背景,這樣你的傢伙可以知道我有或沒有相關知識。我完全是這種嵌入式系統的新手。我對電子產品並不瞭解,我是一個純粹的軟件傢伙。

我唯一的嵌入式系統的經驗是樹莓派,這是從STM32F4探索完全不同。

我可以實現通過使用樹莓派,連接到一臺PC用USB轉RS232適配器的電壓轉換器IC標準的Linux C庫是一個UART讀/寫程序。

我的設備和開發環境

  • 的STM32F429I-DISCO板與STM32F429ZIT6 MCU
  • 一個USB轉RS232電纜和一個電壓轉換器IC,其作品相當不錯的樹莓派。
  • 的Keil uVision 5 IDE。

我想達成什麼

我想實現在STM32F429發現板,可以發送/從PC接收消息/編程。 (例如,發送一個字符串PC。當收到來自PC的字符串,點亮了船上的LED)

我已經做對現在

現在我已經設置我的Keil uVision IDE ,並且可以編譯/運行閃爍的LED示例,我也可以編輯該示例以按照我希望的方式控制LED。 (例如,當用戶按鈕被按下時打開LED,並且當按鈕被釋放時將其關閉)

因此LED部分已經完成了,缺少一部分它如何使用RS232電纜與STM32F4探索板進行通信。

我的問題

  1. 首先,我想知道如果我理解的PIN定義該電路板的正確。根據這一datasheet,我應該在DB9上DB9連接TX引腳PD2(UART5_RX),在DB9到PC12(UART5_TX),在DB9至3.3V的VCC引腳RX引腳和GND到GND。這個連接是否正確?

  2. 是否有關於如何在新的HAL庫,來自Keil公司uVision的最新版本,使用UART示例代碼?我在網上搜索,但大部分示例代碼或tutorial使用的是被稱爲RCC_AHB1PeriphClockCmd功能這似乎不是在新的HAL庫,來自Keil公司uVision存在。

更新

  1. 我的USB轉串口適配器067b:2303 Prolific Technology, Inc. PL2303 Serial Port與電平轉換器IC連接。看起來是這樣的:enter image description here

  2. 當連接到樹莓派,我是繼此instruction,所以對IC的VCC/GND連接到3.3V/GND上樹莓派,我如果這是需要不知道或不。由於「HAL」庫,我的意思是這個stm32f4xx_hal_usart.c文件,根據許可證聲明中的評論,它似乎來自意法半導體公司。儘管這個文件中有一些指令,但我仍然很難找出如何使用這個驅動程序。例如,我無法區分Enable USARTx interface clockEnable the clock for USART GPIOs之間的區別,我不知道如何實現這些功能。所以如果有一個示例代碼,這將是一個很大的幫助,因爲我可以將它與這些說明進行比較。

enter image description here enter image description here

+0

你可以採取裸機路線,通常就像試圖讓一些庫工作一樣快捷簡單https://github.com/dwelch67/stm32_samples我沒有這個確切的板子,但是stm32外圍設備比不同越過芯片。 –

+0

爲什麼涉及5V?根本不需要,也不需要樹莓派。你有什麼樣的USB電纜你有RS232電壓水平會破壞這些芯片,你永遠不能使用RS232。或者你是否錯誤地使用了RS232術語來暗示串行協議而不是電壓標準。我使用基於usb ftdi的突破和電纜,提供3.3v uart接口,只需要真正連接rx和tx,真的希望使用同一臺計算機來避免浮動接地,而且您不需要連接接地。如果有什麼rx,tx和地面,如果你覺得需要。 –

+0

如果你想使用他們的庫,然後聯繫st技術支持和/或通過代碼來查找並找出它。 –

回答

5

我有推Code for this answer以下github上的地址。

代碼很簡單,回答了問題,主要由STM-Cube生成。 .ioc文件也可供您修改。

還有一些其他的外設隨時可以使用,但未經檢驗包括

USB VCport 
Timers set for RC hobby servos, just change pulse width 500-1500 
ADC in DMA mode 
SPI for flash etc 
I2C for port expansion or whatever 

我分享OP的無奈花了很多天,數週或數月激烈戰鬥來獲得這些東西的工作既新舊圖書館。 2016年的最後似乎有一些來自ST的燈光,我可以繼續爲這些偉大的電路板做真正的應用程序。

事實上,在執行此任務時,我必須在正常工作之前重新安裝我的多維數據集及其所有庫,這可能會對其他人造成痛苦。

我會將液晶顯示器和觸摸屏添加到這個'模板'來製作一個很棒的'droidlet'。

我通常將藍牙模塊連接到其中一個UARTS並通過那裏進行調試。

Andy Brown Andy Brown對於某些ST有一些很棒的C++庫。它們似乎基於StdPeripheral庫並需要更新,因此我們可以通過Cube和HAL在新(舊)設備上使用它們。作爲一個社區我們可以更高效地做到這一點。任何想法和接受者?

玩得開心。


的規範方案

Update your Cube and HAL libraries to the latest 
Generate a cube project 
Setup all your peripherals in the dialogs 
Generate code 
Compile 
Add your application 
Test & Debug 
Optimise 
Release 

你只需要照顧的是不同的家庭類似外設有不一致之處如 F0上的ADC不同於F1和F4。 F3可能有16位ADC。


除了RTFM,您可能正在做的一切都是正確的。 (請閱讀手冊中的Fineprint)

除非您想與UART對抗,否則建議您使用標準USB電纜來實現Virtual Comport演示。讓ST成爲設備。

獲取STCube的副本,查看USB和虛擬comport的projects/peripherals目錄。 HAL庫是一樣的,也有這個代碼。

當在任何發現板上工作時,啓動一個STM32 Cube(free from ST)的副本,並在那裏創建您的配置。它向你展示了什麼是使用和什麼是免費的,一個偉大的工具,並將設置USB作爲獎金。

然後使用代碼生成器爲KEIL項目創建一個框架。編譯,運行添加您的應用程序代碼和:-)

你可能想看看這裏Embitz.org他們有很大的IDE,更是F429iDisco例子或更多的例子ST AC6 IDEST page。這些IDE沒有代碼大小限制,您可以在此設備上使用LCD,觸摸等方式進行操作。


應答

不幸的是STM具有分配的最引腳的這一發現爲LCD,觸摸和內存芯片板載必要的休息。有很少的異步功能 - 他們可能認爲USB會好的。

Q1) - 這些通常標記的方式需要通過將Rx連接到TX來「交叉」,反之亦然。

通過在UART引腳上連接'loopback'來檢查您的代碼並檢查LED。 Q2) - STM Cube將爲您生成一個可用的Keil項目。

有演示代碼,將編譯並在 stm32cube_fw_f4_v130 \ STM32Cube_FW_F4_V1.3.0運行\項目\ STM32F429I發現\例子\ UART與Keil工程(MDK-ARM)。您將需要更改爲UART5 - 它配置爲USART1 PA9(Tx)/ PA10(RX),一旦工作交換到UART5,或者在本地USART1 - > UART5測試。

通過在發現上連接RX到Tx進行測試,設置Rx然後發送一個字符串都應該工作,而Rxbuffer應該反映這一點。

然後連接到你的適配器都應該工作,LEDS應該閃爍。

如果沒有,交換Tx和Rx。

檢查DB9上的回送。

如果您在DB9上有調制解調器或PC,則需要先調制解調器控制信號,然後再執行任何操作。 (RTC,CTS,DCD,DTR,DTE)See here。樹莓爲你做這個。

將STM從適配器斷開,並檢查DB9上的PC的環回,然後檢查Tx Rx引腳上的環回。

如果你得到這個很遠,STM閃爍一個LED,遠程另一個,然後你有奇偶校驗,波特率或字長問題。


下面是407的發現(最初發現) - 道歉起初沒有看到你有429 - 我們往往談F4Discovery的VS F429i發現。現在還有其他基於F4的電路板。

在F4-Discovery板上 - UART5不可用,與在PC12上使用CS43L422(麥克風)的I2S3D衝突。與F429相同的引腳過載問題也使用其他UART和USART1。

要麼 - 配置USART2或USART3

陽性是個USART 2和3已經建立了,你可以使用RTS/CTS線。

OR

你需要焊接/拆焊跳線在板上禁用麥克風。

我已經使用USARTS在幾個不同的STM32板上生成了許多項目,並且它們都完美無缺地工作。不幸的是,HAL程序員只提供有或沒有超時的固定長度的驅動程序,沒有Readline接口。

+0

謝謝,你的回答真的幫了我很多。我成功地從STM Cube創建了一個項目,現在可以發送/接收UART消息。 :-) –

+0

@布萊恩 - 謝謝,我昨天也是這樣。 ST已經完全改進了Cube和Ac6(由於許可費用,我沒有使用Keil)。在Cube中可能會有一些問題,RCC爲某些外圍設備組合配置了時鐘分頻器 - 更有可能是我的鍵盤上的白癡按鍵:-)我沒有發帖,直到我確定發生了什麼,可以重現結果。然後我會回到這裏和Github上。你發現了什麼?。 – ChrisR