基於STM32Cube的IIC主從通信


1、建立STM32Cube工程,我使用的芯片是STM32F429,為了更簡單的建立單獨的IIC通信任務,我使用了FREERTOS,另外選擇了RCC(系統時鍾初始化),I2C1,I2C2(為了驗證代碼的一致性),如下圖所示。 
                                                                                       
2、配置完RCC時鍾,F429最高時鍾頻率是180M,另外要注意自己使用的外接晶振的頻率;
3、下面重點介紹I2C配置:
                                     
             I2C有兩種模式,快速模式(400KHz),標准模式(100KHz),並且作為從機時候具有雙應答地址的功能,地址長度也分為7-bit         和10-bit,在測試用例中,我選擇快速模式,頻率為默認400KHz,7-bit地址長度。
                                     
           使能DMA和I2C終端,首優先級均為5,這個可以在NVIC選項中自由設置。
                                   
        DMA的設置在這里最為重要,無論是RX還是TX,均要選擇內存地址遞增模式,並且是單字節遞增,而外設地址則為初始的不遞增。這里不選擇的話,就算通信成功也只能重復發送第一個字節數據。

4、生成代碼,這里選擇Keil5;
5、生成代碼之后,加載了FreeRTOS實時操作系統,但是代碼此時還不能用。這個是ST公司的一個固件庫bug,需要在stm32f4xx_it.c文件的SysTick_Handler函數中添加語句  HAL_IncTick();
                      
因為I2C使用了超時機制,而此超時機制需要提供系統滴答時鍾。
6、如果做為主機,則使用HAL_I2C_Master_Transmit_DMA語句,就可以利用DMA自動發送數據,從機使用HAL_I2C_Master_Receive_DMA語句自動接收數據。


7、測試結果,使用串口將I2C從機接收到“Hello World”打印出來,兩個429芯片管腳都接PB6,PB7。
                        
                        
                       

祝各位使用順利。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM