DMA
1、DMA普通模式和循環模式的區別
循環模式:用于處理一個環形的緩沖區,每輪傳輸結束時數據傳輸 的配置會自動地更新為初始狀態,DMA傳輸會連續不斷地進行。
普通模式:在DMA傳輸結束時,DMA通道被自動關閉,進一步的 DMA請求將不被滿足。
2、DMA傳輸需要指定的條件:
傳輸源:DMA控制器從傳輸源讀出數據;
傳輸目標:DMA控制器將數據傳輸的目標;
觸發信號:用于觸發一次數據傳輸的動作,執行一個單位的傳輸源至傳輸目標的數據傳輸。可以用來控制傳輸的啟動條件。
ADC
1、STM32的內部溫度傳感器
STM32內部溫度傳感器與ADC的通道16相連,與ADC配 合使用實現溫度測量。測量范圍–40~125℃,精度 ± 1.5℃
操作流程:
1)、設置ADC相關參數
// ADC1 configuration -----------------------------
ADC_InitStructure.ADC_Mode ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel 1;
ADC_Init(ADC1, &ADC_InitStructure);
2)、選中ADC1的通道16作為輸入,設置采樣時間17.1us ( Ncycle × tADC 17.1靤 )。
// ADC1 regular channel16 Temp Sensor configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);
3)、設置寄存器ADC_CR2中的TSVREFE位激活溫度傳感器
// Enable the temperature sensor and vref internal channel
ADC_TempSensorVrefintCmd(ENABLE);
4)、轉換采樣值為溫度
ADC轉換結束以后,讀取ADC_DR寄存器中的結果,轉換溫度值計算公式如下:
V25 - VSENSE
T(℃) ------------ + 25
Avg_Slope
V25: 溫度傳感器在25℃時 的輸出電壓,典型值1.43 V。
VSENSE:溫度傳感器的當前輸出電壓,與ADC_DR 寄存器中的結果ADC_ConvertedValue之間的轉換關系為:
ADC_ConvertedValue * Vdd
VSENSE --------------------------
Vdd_convert_value(0xFFF)
Avg_Slope:溫度傳感器輸出電壓和溫度的關聯參數,典型值4.3 mV/℃。
//Converted Temperature
Vtemp_sensor ADC_ConvertedValue * Vdd / Vdd_convert_value;
Current_Temp (V25 - Vtemp_sensor)/Avg_Slope + 25;
2、VDDA的電壓范圍
STM32的數據手冊規定,VDD與VDDA之間的壓差不能大于300mV。ADC的工作電壓范圍在2.4V~3.6V,供電電壓VDD范圍在2.0V~3.6V.
1、STM32的USB中斷說明
STM32的USB模塊可產生三種中斷:USB喚醒中斷、USB高優先級中斷和USB低優先級中斷,這三種中斷對應事件如下:
1)、USB喚醒中斷 - 在中斷向量表中的位置是42
這個中斷在USB設備從暫停模式喚醒時產生,喚醒事件由USB_ISTR寄存器的WKUP位標識。
2)、USB高優先級中斷 - 在中斷向量表中的位置是19
這個中斷僅由USB同步(Isochronous)模式傳輸或雙緩沖塊(Bulk)傳輸模式下的正確傳輸事件產生,正確傳輸事件由USB_ISTR寄存器的CTR位標識。
3)、USB低優先級中斷 - 在中斷向量表中的位置是20
這個中斷由所有其它的USB事件產生,例如正確傳輸(不包括同步模式和雙緩沖塊模式)、USB復位等,事件標志位在USB_ISTR寄存器中。
在STM提供的STM32 USB 開發包中的例程包含了上述三種中斷的處理方法。例如在USB Speaker例程中,CTR_HP函數處理USB高優先級中斷;在所有例子中都有USB_Istr()函數處理USB低優先級中斷。
bxCAN
1、CAN波特率的設定計數
Etherne
SPI
1、SPI外設的NSS引腳設置為通用IO口
由于SPI外設的SPI_CR1寄存器中SSM置1時,NSS引腳可被被釋放用于GPIO使用,因此無論是在SPI的主模式或是從模式下均可以將NSS引腳釋放,由軟件或硬件進行NSS管理;
操作流程:
1)、初始化SPI外設,設置NSS由軟件管理:
SPI_InitStructure.SPI_NSS SPI_NSS_Soft;
2)、如果NSS引腳用于其他外設時,需要使能NSS輸出:
SPI_SSOutputCmd(SPIx, ENABLE);
2、SPI 單線傳輸
此模式下限制:只能用作輸入或者輸出,或者工作在半雙工模式下。
I2C
USART
Device Signature
1、 STM32F10xxx系列MCU內部含有一個出廠被固化的96bit唯一識別ID,該ID可以用于芯片加密、設備識別等一類特殊應用。
讀取該ID的方法:
u32 DevID[3];
DevID[0] *(vu32*)(0x1ffff7e8);
DevID[1] *(vu32*)(0x1ffff7ec);
DevID[2] *(vu32*)(0x1ffff7f0);
數組DevID[3]中即保存了MCU的ID。
注:256K Flash或以上容量的STM32,僅“Z”版本才有,之前的“A”版本沒有。
1、STM32對內部Flash的保護措施
所有STM32的芯片都提供對Flash的保護,防止對Flash的非法訪問 - 寫保護和讀保護。
1)、讀保護即大家通常說的“加密”,是作用于整個Flash存儲區域。一旦設置了Flash的讀保護,內置的Flash存儲區只能通過程序的正常執行才能讀出,而不能通過下述任何一種方式讀出:
通過調試器(JTAG或SWD);
從RAM中啟動并執行的程序;
2)、寫保護是以四頁(1KB/頁) Flash存儲區為單位提供寫保護,對被保護的頁實施編程或擦除操作將不被執行,同時產生操作錯誤標志。
讀與寫設置的效果見下表:
讀保護 寫保護 對Flash的操作功能
有效 有效 CPU只能讀,禁止調試和非法訪問。
有效 無效 CPU可以讀寫,禁止調試和非法訪問,頁0~3為寫保護。
無效 有效 CPU可讀,允許調試和非法訪問。
無效 無效 CPU可以讀寫,允許調試和非法訪問。
2、當Flash讀保護生效時,CPU執行程序可以讀受保護的Flash區,但存在兩個例外情況:
1)、調試執行程序時;
2)、從RAM啟動并執行程序時
STM32還提供了一個特別的保護,即對Flash存儲區施加讀保護后,即使沒有啟用寫保護,Flash的第 0 ~ 3 頁也將處于寫保護狀態,這是為了防止修改復位或中斷向量而跳轉到RAM區執行非法程序代碼。
3、Flash保護相關函數
FLASH_Unlock(); //Flash解鎖
FLASH_ReadOutProtection(DISABLE); //Flash讀保護禁止
FLASH_ReadOutProtection(ENABLE); //Flash讀保護允許
CRC
1、CRC計算公式
所有的STM32芯片都內置了一個硬件的CRC計算模塊,可應用到通信程序中,這個CRC計算模塊使用常見的、在以太網中使用的計算多項式:
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1
寫成16進制就是:0x04C11DB7
2、使用這個內置CRC模塊操作步驟:
復位CRC模塊(設置CRC_CR0x01),這個操作把CRC計算的余數初始化為0xFFFFFFFF
把要計算的數據按每32位分割為一組數據字,并逐個地把這組數據字寫入CRC_DR寄存器(既下圖中的綠色框)
寫完所有的數據字后,就可以從CRC_DR寄存器(既下圖中的蘭色框)讀出計算的結果。
注意:雖然讀寫操作都是針對CRC_DR寄存器,但實際上是訪問的不同物理寄存器。
評論
查看更多