
拿到這樣的需求,我們當(dāng)然是先得保證通訊正常。于是我找了一個(gè)USB例程與一個(gè)CAN例程,分別調(diào)試驗(yàn)證。
經(jīng)過幾番折騰已經(jīng)保證了USB與上位機(jī)能正常通訊了,也能保證了CAN的正常收發(fā)(拿了兩塊開發(fā)板做驗(yàn)證)。
兩頭都沒有問題了,再加上一些數(shù)據(jù)處理就差不多完成了。USB與CAN我都是第一次用,沒想到那么順利,美滋滋,正準(zhǔn)備放松的時(shí)候,問題就來了。這是一個(gè)整體的東西,最終都要把這兩部分集合起來吧。
我把CAN工程里關(guān)于CAN的部分移到USB工程里,這時(shí)候CAN竟然用不了了。這時(shí)候我就開始在懷疑自己是不是手賤誤刪了哪里了,于是重新來一遍,發(fā)現(xiàn)還是不行。
查了代碼很久也沒找出什么錯(cuò)誤了,于是決定先不找錯(cuò)誤了,進(jìn)度要緊,這時(shí)候覺得應(yīng)該是工程哪里有問題了,先想其它辦法避過這個(gè)問題。
于是乎我就換著來,我把USB的工程里關(guān)于USB的部分移到CAN工程里。大家猜一猜發(fā)生了什么?USB竟然打都打不開!要炸了。。但是這時(shí)候已經(jīng)很明確肯定不是移植問題了。CAN部分首先想到了波特率是不是對不上了,USB部分首先想到USB的時(shí)鐘是從哪來的,之前沒用過也沒仔細(xì)看。帶著這兩個(gè)問題去查看了參考手冊與代碼,果然,STM32F429的USB的時(shí)鐘還真有點(diǎn)特殊(不知道其它芯片是不是也是這樣),其來自于PLL輸出,而不是我們熟知的APB1、APB2:
從時(shí)鐘樹中我們可以看出:(1)的輸出是系統(tǒng)時(shí)鐘,(2)的輸出是USB時(shí)鐘。相關(guān)公式:
當(dāng)然(2)的輸出不僅僅是給USB提供時(shí)鐘,還給RNG與SDIO提供時(shí)鐘:
這一部分對應(yīng)的代碼在system_stm32f4xx.c中。下面看看USB工程、CAN工程中該文件的差別:
可見,問題找出來了。在USB工程中,CAN通訊不正常是因?yàn)橄到y(tǒng)時(shí)鐘降為168MHz,導(dǎo)致APB1時(shí)鐘變?yōu)?2MHz,而代碼中是用APB1=45MHz來計(jì)算CAN的波特率的,所以導(dǎo)致波特率對應(yīng)不上導(dǎo)致CAN通訊錯(cuò)誤。
在CAN工程中,系統(tǒng)時(shí)鐘為180MHz,USB OTG FS時(shí)鐘變?yōu)?1MHz,超過了正常的48MHz,導(dǎo)致USB不能正常工作。
所以,每當(dāng)用到USB,都得單獨(dú)配置PLLCLK = 168MHz了,這樣的話其他外設(shè)可能得改變原有的配置,比如這里的CAN就得用APB1=42MHz來計(jì)算波特率了,否則就會(huì)出錯(cuò)。這很不方便。。
正如野火火哥說的,這是ST的一個(gè)奇葩設(shè)計(jì)。
所以,大家以后再使用USB的時(shí)候當(dāng)心這個(gè)陷阱!
-
usb
+關(guān)注
關(guān)注
60文章
8447瀏覽量
284951 -
CAN
+關(guān)注
關(guān)注
59文章
3069瀏覽量
472877 -
STM32
+關(guān)注
關(guān)注
2310文章
11171瀏覽量
373748
發(fā)布評論請先 登錄
CherryUSB和RTThread自帶的USB如何合理使用?
studio建立f429工程使用 lwip運(yùn)行錯(cuò)誤的原因?
103rc rt-studio TIM4 CH2輸出PWM不正常怎么解決?
移植rtthread_NANO之后SPI通訊不了怎么解決?
移植rtthread_NANO之后SPI通訊不了怎么解決?
cyusb3104在長時(shí)間bulk in上傳數(shù)據(jù)時(shí)會(huì)突然卡死flaga和flagb標(biāo)志線不正常一直為低,為什么?
求助,關(guān)于STM32F407VET6 I2S采用DMA傳輸問題求解
讓開發(fā)板暢游網(wǎng)絡(luò):RT-Thread CherryUSB 驅(qū)動(dòng) RNDIS 模塊詳解 | 技術(shù)集結(jié)
6軸步進(jìn)電機(jī)驅(qū)動(dòng)+STM32F767+485+CAN+網(wǎng)口+12輸入輸出原理圖
如何解決CAN通訊故障?原因分析與解決方法全攻略
STM32F40xxx和STM32f41xx flash編程手冊
STM32F429的USB工程CAN通訊不正常經(jīng)驗(yàn)分享
評論