本來要接著寫滴答定時(shí)器的,但是趁熱打鐵寫下SPI2到SPI1的移植。
為什么SPI2到SPI1的移植要放在nRF24L01模塊里寫呢,因?yàn)闊o線模塊最重要的數(shù)據(jù)傳輸就是通過SPI實(shí)現(xiàn)的。為什么需要移植呢,因?yàn)榧词故且粋€(gè)廠家的板子,不同型號之間它的無線模塊引腳也有可能是不同的,順便稿下移植,加深下理解。SPI2移植到SPI1呢,自己做的時(shí)候遇到了一些問題,就從遇到的問題順便講下初始化。
1.引腳問題
看stm32的手冊,不知道為什么,無論在GPIO還是在SPI里都沒有看到這個(gè)引腳的問題(初學(xué)者有可能移植的時(shí)候可能納悶為什么是這些引腳),只有在引腳復(fù)用AFIO那里才提了一下,如下圖
這樣才知道SPI1的引腳,但是SPI2的引腳手冊里沒有提到,只能結(jié)合板子的電路原理圖順便查一下了,以我用的兩個(gè)德飛萊的板子為例,前者是德飛萊M3S,可以插ILI9320那個(gè)板子,后者是德飛萊小一些沒有SD插槽那個(gè)板子。
可以看到二者的引腳是不同的,但是引腳并不是隨意給出的,在不進(jìn)行重映射的情況下,前者的SPI引腳是SPI2對應(yīng)的引腳,后者則是SPI1對應(yīng)的引腳。由于對應(yīng)的引腳不同,自然在GPIO的初始化時(shí)候,要修改初始化的引腳,引腳的輸入輸出模式,在數(shù)據(jù)手冊中已經(jīng)給出,如下
2.時(shí)鐘的使能
由于引腳改了,使能的GPIO時(shí)鐘也需要進(jìn)行一下修改,同時(shí)切記不要忘了SPI1和SPI2時(shí)鐘的區(qū)別,看一下數(shù)據(jù)手冊中給出的系統(tǒng)結(jié)構(gòu),如下圖
特別需要注意的是SPI1掛在APB2上,而SPI2和SPI3掛在APB1上,因此SPI時(shí)鐘初始化的時(shí)候,要注意是
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1, ENABLE );
這兩句的哪一個(gè)(我還傻傻滴找了半天RCC_APB1Periph_SPI1)
這個(gè)時(shí)鐘在設(shè)置SPI速度的時(shí)候還會導(dǎo)致一個(gè)小問題,APB2的最大時(shí)鐘是APB1的一倍,由于nRF24L01的最大頻率是10MHz,因此移植的時(shí)候注意一下。
3.片選和使能的預(yù)定義
看一下上面的無線模塊的電路原理圖,除了SPI引腳就是片選CSN和使能CE引腳了,這兩個(gè)引腳是用于開始和結(jié)束SPI通信的,移植的時(shí)候也有可能沒注意到。
庫函數(shù)中為了簡潔明了,一般將引腳的置高置低都用預(yù)定義的形式表示,比如CE的置高置低是這么表示的
#define NRF24L01_CE_SET GPIO_SetBits(GPIOG,GPIO_Pin_6)
#define NRF24L01_CE_CLR GPIO_ResetBits(GPIOG,GPIO_Pin_6)
在移植的時(shí)候,這種預(yù)定義很容易忽略,忘了的話根本就不會開始SPI通信,自然也就沒有現(xiàn)象了。
4.庫函數(shù)的改變
在SPI2的函數(shù)中,只要是涉及寫寄存器的部分,就要看下到底寫的是SPI2還是SPI1的寄存器,當(dāng)然,這里有一個(gè)很明顯的特點(diǎn),就是stm32官方的庫函數(shù)一般是通用的,像下面這個(gè)SPI命令函數(shù)
SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState)
而廠商寫的,一般都是需要注意下的,比如SPI速度設(shè)置的函數(shù)
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI2->CR1&=0XFFC7;
SPI2->CR1|=SPI_BaudRatePrescaler;
SPI_Cmd(SPI2,ENABLE);
}
這里寫的寄存器就是SPI2的寄存器,移植的時(shí)候就需要改一下啦(結(jié)構(gòu)體寄存器關(guān)系滴答定時(shí)器那里已經(jīng)講過啦)
5.玄學(xué)問題((*^__^*)。。。)
搞硬件,必不可少的會出現(xiàn)玄學(xué)問題,比如keil4好使,keil5不好使的什么的,所以需要不斷地嘗試,自己做這個(gè)移植的時(shí)候,有一段毫不相關(guān)引腳注釋居然改變了結(jié)果,最后一句一句注釋掉,發(fā)現(xiàn)實(shí)際是廠商的函數(shù)寫的不規(guī)范,把端口的輸入輸出頻率的初始化給漏掉了大部分玄學(xué)問題都是都原因的,移植的時(shí)候不斷調(diào)試就能找到問題所在。
上一篇:STM32學(xué)習(xí)筆記---基于UCOSII的EXTI外部按鍵中斷實(shí)驗(yàn)
下一篇:STM32F1x系列內(nèi)存結(jié)構(gòu)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 智能護(hù)眼臺燈設(shè)計(jì)
- 蓄電池高能脈沖充電系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)定時(shí)器的電子時(shí)鐘設(shè)計(jì)方案
- 瑞薩電子推出面向單電機(jī)應(yīng)用優(yōu)化的卓越MCU, 涵蓋電動工具、家用電器等廣泛應(yīng)用場景
- 動力電池“三國殺”:中企提前鎖定勝局,日韓廠商集體失守
- 研究人員開發(fā)出人工智能雷達(dá)技術(shù) 可用于高分辨率3D城市制圖
- 上半年動力電池TOP15:寧德時(shí)代和比亞迪裝車近200GWh 兩家公司新上榜
- 半年砸下數(shù)千億元!“并購”浪潮下,汽車芯片大戰(zhàn)再起風(fēng)云
- 奇瑞人形機(jī)器人9月開售并將面向個(gè)人用戶,機(jī)器人時(shí)代該來了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-上
- 車云一體其他層面的架構(gòu)設(shè)計(jì)借鑒-下
- 邀您共赴一場技術(shù)盛宴! 2022英特爾® FPGA中國技術(shù)周 ——加速,讓創(chuàng)新有跡可循
- 你是Stellaris控?快來搶iPad、iTouch!
- 你是課代表——TI培訓(xùn)最受歡迎課程由你做主 發(fā)帖薦課即可參與幸運(yùn)抽獎!
- 直播已結(jié)束|貝能國際新型玻璃破碎檢測方案
- 立即報(bào)名 | 2025 瑞薩電子工業(yè)以太網(wǎng)技術(shù)日 即將開啟?。?月12日-4月18日)
- 輕松注冊TDK,盡享超值好禮!
- 將想法變成現(xiàn)實(shí),Maxim MAX32630FTHR創(chuàng)意設(shè)計(jì)大賽,重磅開啟!
- 51單片機(jī)之IO口擴(kuò)展——74HC595芯片串行轉(zhuǎn)并行實(shí)驗(yàn)
- 大聯(lián)大詮鼎集團(tuán)推出2.1聲道智能音響參考設(shè)計(jì)方案
- 紫光展銳發(fā)聲:未受紫光集團(tuán)事宜影響
- 51單片機(jī)之步進(jìn)電機(jī)實(shí)驗(yàn)
- 安徽芯紀(jì)元:創(chuàng)新為“魂” “芯”越世界
- 種下硅林的泰克,更期待創(chuàng)造未來
- 迎接異構(gòu)計(jì)算,CRN評選2021年全球最熱門的半導(dǎo)體初創(chuàng)公司
- 碳化硅在電動汽車中的三個(gè)應(yīng)用點(diǎn)
- 基于DSP的繼電保護(hù)測試儀信號采集裝置硬件設(shè)計(jì)
- 集成運(yùn)算放大器參數(shù)測試儀的校準(zhǔn)方案
- 生產(chǎn)安全監(jiān)控管理和調(diào)度指揮視頻解決方案
- 關(guān)于2440的應(yīng)用
- 低價(jià)出一塊Cortex A9開發(fā)板
- SensorTag到底有多大?支持BLE最便宜的手機(jī)是哪個(gè)?
- IAR EWARM鏈接警告:如何解決Warning [Lt009] Inconsistent wchar_t size
- 【四軸DIY,一起來?!】新設(shè)計(jì)的簡易四軸原理圖及設(shè)計(jì)方案分享
- 上電順序反了會造成什么后果,芯片會燒毀嗎
- 推薦一本書《開源的成功之路》
- 急求LED米字管的引腳圖
- 使用MEMS麥克風(fēng)MP23ABS1測量超聲波