STM32F767芯片在使用中的注意點(一)

1、STM32F767的ADC最大工作頻率是36Mhz,而 ADC 時鐘(ADCCLK)來自 APB2,APB2 頻率一般是 108Mhz,我們設置 ADCPRE=01,即4 分頻,這樣得到 ADCCLK 頻率爲 27Mhz。
2、FMC是STM32F429/439專有的,是在FSMC的基礎上支持SDRAM的升級版本
3、AHB系統總線分爲APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設備;
4、FSMC的三個配置寄存器:FSMC_BCRx(片選控制配置)、FSMC_BTRx(片選時序)(讀寫時序設置)、FSMC_BWTRx(片選寫時序)(寫時序設置)。
5、STM32的FSMC有HADDR[27:0],其中[27:26]用來選擇BANK區域的4個不同塊。剩下的[25:0]則用來連接外部存儲區域的地址線FSMC_A[25:0]。如果數據寬度是8bit,此時的HADDR[25:0]和FSMC_A[25:0]是完全對應的。如果數據寬度是16bit,此時的HADDR[25:1]和FSMC_A[24:0]是對應起來的。需要注意:無論數據寬度是多少,外部的FSMC_A[0]和外部設備地址A[0]總是對應的。
6、HADDR[27:26]是不可手動配置的,當選擇所在區後會自動賦值。
7、爲何FSMC可以用來驅動LCD,原因是FSMC的讀寫時序和LCD的讀寫時序很相似,於是把LCD當成一個外部存儲器來用。利用FSMC在相應的地址讀或寫相關數值時,STM32的FSMC會在硬件上自動完成時序上的控制。所以我們只要設置好讀寫相關時序的寄存器後,FSMC就可以幫我們完成時序上的控制了。對於FSMC驅動LCD有一個比較難理解的地方就是當你的LCD使用16位寬度的數據傳輸(也就是有16條數據線,就像我上面說的我使用的是16位的80並口)的時候,HADDR和FSMC_A這個地址塊的對應問題(使用8位數據則不用考慮此問題)。
1)LCD_CS:LCD片選信號
2)LCD_WR:LCD寫信號
3)LCD_RD:LCD讀信號
4)DB[17:1]:16位雙向數據線
5)LCD_RST:硬復位LCD信號
6)LCD_RS:命令/數據標誌(0:命令,1:數據)
7)BL_CTR:背光控制信號
8)T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,觸摸屏接口信號
8、CPU中一個地址只能存儲一個字節的數據,而當CPU通過地址線訪問外部存儲器的一個地址時,如果外部儲存器的一個地址的數據剛好是八位時(即一個字節),訪問一次就可接收過來;CPU爲了解決這個問題,只能夠再派一個地址去訪問外部存儲器的同一個地址,把剩下的那個字節也接收過來,之後再接着訪問外部存儲器的第二個地址,依此類推。。。在此過程中,CPU如果還是把地址線一對一地連接到外部存儲器上,那就做不到讓自己的第二個地址還繼續訪問同一個地址了。
於是,人們幫了CPU一把,讓它每一回訪問時還是照舊把自己內部的地址按二進制拆分放到HADDR的0~25上(如下圖)
然後,到了FSMC_A一端,人們選擇性地去掉HADDR[0],然後才把把剩餘的25根依次接到FSMC_A上(人們之所以這麼做,正是因爲他們發現了一個規律,那就是,通過HADDR[1]是0還是1卻正好能夠區別外部存儲器上的0地址和1地址,而通過HADDR[2]和HADDR[1]是10還是11又正好能夠區別外部存儲器上的2地址和3地址。。。依此類推,下一個就是通過HADDR[3]HADDR[2]和HADDR[1]一起來判斷)
最後,地址區分出來了,接收數據也就好說了,因爲在CPU那邊,它對人們把HADDR[0]不接到FSMC上是不知情的,所以,它還是照舊把地址逐次增一地去訪問,也還是發出一個地址讀回一個字節,但是它不知道的是,自己每發兩個地址都會停留在外部存儲器的同一個地址上,所以最終,同一個地址上的兩個字節都會被CPU讀走。。。
9、在戰艦上的引腳定義:
LCD_CS:FSMC_NE4 PG12
LCD_WR:FSMC_NWE PD5
LCD_RD:FSMC_NOE PD4
DB[15:0]:FSMC_D[15:0]
LCD_RST:RESET
LCD_RS:FSMC_A10 PG0
BL_CTR:LCD_BL PB0
在阿波羅上的引腳定義:
LCD_CS:FMC_NE1 PD7
LCD_WR:FSMC_NWE PD5
LCD_RD:FSMC_NOE PD4
DB[15:0]:FSMC_D[15:0]
LCD_RST:RESET
LCD_RS:FMC_A18 PD13
BL_CTR:LCD_BL PB5
10、當 APB1的時鐘分頻數爲 1 的時候,TIM2~7 以及 TIM12~14 的時鐘爲 APB1 的時鐘,而如果 APB1 的時鐘分頻數不爲 1,那麼 TIM2~7 以及 TIM12~14 的時鐘頻率將爲 APB1 時鐘的兩倍;
11、STM32 的通用 TIMx (TIM2~TIM5 和 TIM9~TIM14)定時器,高級定時器(TIM1和TIM8), 低功耗定時器(LPTIM1)
12、主機和從機模式的區別就在於:
主模式就是SPI主機,簡單說就是提供SCK的那方.
而從模式,就是被動接受SCK的那方.
13、F7 FLASH
容量高達 1 MB;
256 位寬數據讀取;
字節、半字、字和雙字數據寫入;
扇區擦除與全部擦除;
14、USART_ClearFlag 清除完成標誌位 USART_ClearITPendingBit清除中斷標誌位
15、不要把 uart_init(115200);去掉,因爲在 TPAD_Init 函數裏面,我們有用到 printf,如果你去掉了 uart_init,就會導致 printf 無法執行,從而死機
16、HSE 是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率範圍爲 4MHz~26MHz。阿波羅 STM32F7 開發板接的是 25MHz 外部晶振。(外部晶振比內部晶振準確)
17、keil中有些語句不能打斷點: 將Optimization級別選擇爲default或者Level0/Level1級別,然後重新編譯工程;
18、共享資源異步訪問時需要加信號量或者其他可以防止同時訪問的情況;

發佈了68 篇原創文章 · 獲贊 148 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章