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 使能電源...