STM32晶元CAN2只能傳送不能接收問題解決。

2021-09-25 20:12:54 字數 1006 閱讀 8221

stm32f107在使用過程中,調整了一下任務優先順序後,發現can2相關的任務的優先順序被提高後,can2只能傳送,不能接收,後來通過把can2的任務延時一段時間再初始化啟動,發現可以正常收發了,通過排除的辦法,發現只要can1的任務只要滯後與can2任務的啟動,就會發生這種現象。後來聽同事講stm32的can2是通過can1擴充套件出來的,必須先初始化can1,再初始化can2才可以正常執行。後來把這兩個can的初始化做了個先後順序初始化後,恢復正常。怎麼調整任務優先順序都可以正常收發。

在網上搜了一下,發現有其它朋友也碰到過此種情況:

除錯stm32f107的can2竟然無法接收。通過與另乙個**對比,終於發現想用can2,則必須把can1的rcc也配置上,就可以接收了。

上網查了下,21ic給解釋手冊也懶得看了,總之,can2和can1是有關聯的。對於stm32f407可能也是如此。

如果設定兩遍也不行。也是can2不能接收。

比如這樣設定兩遍:

rcc_apb1periphclockcmd(rcc_apb1periph_can1, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_can2, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_can1, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_can2, enable);

那麼不行,只有在整個工程中設定一遍才可以,如下:

rcc_apb1periphclockcmd(rcc_apb1periph_can1, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_can2, enable);

只有先使能can1  然後才使能can2  否則有的不好用。

上面這些都是試出來的,沒看文件,沒理論依據。

關於fifo 的配置  可以看這個文章

而我目前只是採用乙個fifo0.

好用就得。實時性對我來說是次要的。

STM32晶元CAN2只能傳送不能接收問題解決。

stm32f107在使用過程中,調整了一下任務優先順序後,發現can2相關的任務的優先順序被提高後,can2只能傳送,不能接收,後來通過把can2的任務延時一段時間再初始化啟動,發現可以正常收發了,通過排除的辦法,發現只要can1的任務只要滯後與can2任務的啟動,就會發生這種現象。後來聽同事講st...

STM32晶元解讀

核心 32位 高效能arm cortex m3處理器 時鐘 高達72m,實際還可以超屏一點點 單週期乘法和硬體除法 儲存器容量 stm32f103zet6 512k flash,64k sram stm32f103rct6 256k flash,48k sram 時鐘,復位和電源管理 2.0 3.6...

stm32晶元休眠模式 stm32實現待機喚醒

stm32的低功耗模式有3種 1 睡眠模式 cm3核心停止,外設仍然執行 2 停機模式 所有時鐘都停止 3 待機模式 1.8v核心電源關閉 進入待機模式的方法,以及設定wk up引腳用於把stm32從待機模式喚醒的方法 一般步驟如下 1 設定sleepdeep位 scb scr的第二位 2 使能電源...