**:
從12月中旬到現在一直都在除錯板子,把f107上的can1(pd0,pd1)轉移到f105上的can1(pb8,
pb9),本來以為會是很簡單的進行重對映就行了,但是生活處處是
充滿「驚喜」啊!
在進行了重對映後發現can進不了中斷,很鬱悶!仔細檢查了兩個端點can的連線口後發現是沒錯的,但還是進
不了中斷。那只能進行單步除錯了,最後發現是在can的初始
化模式成功後要進入正常模式時失敗了,can的處理工
程是:初始化模式:設定can_mcr 暫存器的inrq 位為』1』 ,請求bxcan進入初始化模式,然後等待硬體對can_msr
暫存器的inak 位置』1』 來進行確認。當bxcan處於初始化模式
時,禁止報文的接收和傳送,並且cantx引腳輸出隱
性位(高電平)。
初始化模式的進入,不會改變配置暫存器。
正常模式:在初始化完成後,軟體應該讓硬體進入正常模式,以便正常接收和傳送報文。軟體可以通 過
對can_mcr 暫存器的inrq 位清』0』 ,來請求從初始化模式進入正常模
式,然後要等待硬體對
can_msr 暫存器的
inak 位置』0』 的確認。
在跟can匯流排取得同步,即在canrx引腳上監測
到11個連續的隱性位(等效於匯流排空閒)後,
bxcan才能正常接收
和傳送報文。
但就是在我的程式裡,在inrq清「0」了以後就在等待inak的清零,直到超過定時退出返回caninitfailed,而
沒有返回caninitok,所以也就是說我的can1模組初始化成功
後根本就沒有進入正常模式,又怎麼會進入中斷呢!
但是我在程式裡分明按著例程來進行修改的,也進行了重映**,檢查多次後我把錯誤定位在硬體的接收電路,因為
在上面的
模式解釋處說到了關於can的tx和rx應該出現的高低電平,但是我用萬用表測量我的tx端是卻是出現了低
電平,所
以我又對can的收發設計電路進行了一番仔細的研究,電路應該
是沒錯的。他媽究竟是哪錯啊,要弄死人 啊!
在不經意間我把乙個例程跑了,這個例程用到了兩個can,我的硬體裡有兩路can的使用,而且硬體也是一模一
樣的,但是我的can2電路還沒有進行硬體的焊接,居然我的
can2成功的進入了正常模式,因此我更肯定了是硬體的
問題,因為程式是一樣的。但再次的硬體分析完了之後還是
感覺硬體是沒錯的,那就只有先把焊了的電路先斷了一
下,再進行除錯,結果還是不行,看來還真不是錯在硬體啊!
沒辦法了,只能是拿著萬用表來查究竟是在哪一句在執行的時候把tx腳的電平給拉低了,好不容易定位在
gpio_init()程式裡發現了電平變低的語句,但是在對比了
can_bsrr和can_odr兩個暫存器後發現程式是對
的,搞毛啊!
對映的程式,偶然發現到了自己乙個地方弄錯了,乙個很細
小的地方,經修改,總算是解決了我的問題,怎麼說吧,
希望後人不要犯我這種低階錯誤。
在這半個多月,我基本逛遍了所有的電子論壇,但是就沒有人能幫忙解決,說沒有也有乙個帖子說了跟我同樣的
問題,我也找到了他本人的qq,想向他請教,有時候人是
一直奇怪的動物,很欠抽的。我連續幾天向他發訊息,說
我的問題(這幾天他一直沒上線)語氣很客氣,乙個字的回答沒有,難得今天看見他上線了,再次發了我問題,還是 沒
有回答,我就火了,問候了一下他全家,果然來效果了,馬上把我拉黑了!大家說這是安的什麼心啊,不懂或者是
忘了的,是個正常人都會回一下,不要給人希望,浪費人家
時間,欠抽的!
所以在此也希望大家有看到這的,希望大家以後在逛論壇的時候要是碰到有人提問,自己也懂的盡量的幫助一下
別人,你自己也可以有幾分嘛!
STM32的CAN匯流排除錯
1.使用stm32的can匯流排,回環程式寫好之後,在無外接收發晶元的情況下,使程式不斷發資料,使用示波器可以看到tx引腳有波形,而rx引腳沒有波形 2.模式改為正常模式,在沒有接收發晶元的情況下再次測一下tx與rx的波形,但是發現使用示波器採集不到波形,而且在發了幾次資料後會進行標準庫的斷言,一直...
stm32內部的CAN匯流排
bxcan是基本擴充套件can basic extended can 的縮寫,它支援can協議2.0a和2.0b 它的設計目標是以最小的cpu負載來高效處理大量的報文。它也支援報文傳送的優先順序要求 優先順序可軟體配置 bxcan模組可以完全自動地接收和傳送can報文,且完全支援標準識別符號 11位...
關於STM32中CAN中斷的使用
如果你用的can引腳是pa11和pa12,接收中斷用can1 rx0 irqn。如果can引腳用的是pb8和pb9,也就是用重定義的引腳,接收中斷用can1 rx1 irqn。由於pa11和pa12也是usb的引腳,所以非互聯型且帶can控制器的微控制器的庫檔案在起名字時用了usb lp can1 ...