DMA
1、DMA普通模式和循環(huán)模式的區(qū)別
循環(huán)模式:用于處理一個環(huán)形的緩沖區(qū),每輪傳輸結束時數(shù)據(jù)傳輸 的配置會自動地更新為初始狀態(tài),DMA傳輸會連續(xù)不斷地進行。
普通模式:在DMA傳輸結束時,DMA通道被自動關閉,進一步的 DMA請求將不被滿足。
2、DMA傳輸需要指定的條件:
傳輸源:DMA控制器從傳輸源讀出數(shù)據(jù);
傳輸目標:DMA控制器將數(shù)據(jù)傳輸?shù)哪繕耍?/p>
觸發(fā)信號:用于觸發(fā)一次數(shù)據(jù)傳輸?shù)膭幼鳎瑘?zhí)行一個單位的傳輸源至傳輸目標的數(shù)據(jù)傳輸??梢杂脕砜刂苽鬏?shù)膯訔l件。
ADC
1、STM32的內(nèi)部溫度傳感器
STM32內(nèi)部溫度傳感器與ADC的通道16相連,與ADC配 合使用實現(xiàn)溫度測量。測量范圍–40~125℃,精度 ± 1.5℃
操作流程:
1)、設置ADC相關參數(shù)
// 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)、轉(zhuǎn)換采樣值為溫度
ADC轉(zhuǎn)換結束以后,讀取ADC_DR寄存器中的結果,轉(zhuǎn)換溫度值計算公式如下:
V25 - VSENSE
T(℃) ------------ + 25
Avg_Slope
V25: 溫度傳感器在25℃時 的輸出電壓,典型值1.43 V。
VSENSE:溫度傳感器的當前輸出電壓,與ADC_DR 寄存器中的結果ADC_ConvertedValue之間的轉(zhuǎn)換關系為:
ADC_ConvertedValue * Vdd
VSENSE --------------------------
Vdd_convert_value(0xFFF)
Avg_Slope:溫度傳感器輸出電壓和溫度的關聯(lián)參數(shù),典型值4.3 mV/℃。
//Converted Temperature
Vtemp_sensor ADC_ConvertedValue * Vdd / Vdd_convert_value;
Current_Temp (V25 - Vtemp_sensor)/Avg_Slope + 25;
2、VDDA的電壓范圍
STM32的數(shù)據(jù)手冊規(guī)定,VDD與VDDA之間的壓差不能大于300mV。ADC的工作電壓范圍在2.4V~3.6V,供電電壓VDD范圍在2.0V~3.6V.
1、STM32的USB中斷說明
STM32的USB模塊可產(chǎn)生三種中斷:USB喚醒中斷、USB高優(yōu)先級中斷和USB低優(yōu)先級中斷,這三種中斷對應事件如下:
1)、USB喚醒中斷 - 在中斷向量表中的位置是42
這個中斷在USB設備從暫停模式喚醒時產(chǎn)生,喚醒事件由USB_ISTR寄存器的WKUP位標識。
2)、USB高優(yōu)先級中斷 - 在中斷向量表中的位置是19
這個中斷僅由USB同步(Isochronous)模式傳輸或雙緩沖塊(Bulk)傳輸模式下的正確傳輸事件產(chǎn)生,正確傳輸事件由USB_ISTR寄存器的CTR位標識。
3)、USB低優(yōu)先級中斷 - 在中斷向量表中的位置是20
這個中斷由所有其它的USB事件產(chǎn)生,例如正確傳輸(不包括同步模式和雙緩沖塊模式)、USB復位等,事件標志位在USB_ISTR寄存器中。
在STM提供的STM32 USB 開發(fā)包中的例程包含了上述三種中斷的處理方法。例如在USB Speaker例程中,CTR_HP函數(shù)處理USB高優(yōu)先級中斷;在所有例子中都有USB_Istr()函數(shù)處理USB低優(yōu)先級中斷。
bxCAN
1、CAN波特率的設定計數(shù)
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內(nèi)部含有一個出廠被固化的96bit唯一識別ID,該ID可以用于芯片加密、設備識別等一類特殊應用。
讀取該ID的方法:
u32 DevID[3];
DevID[0] *(vu32*)(0x1ffff7e8);
DevID[1] *(vu32*)(0x1ffff7ec);
DevID[2] *(vu32*)(0x1ffff7f0);
數(shù)組DevID[3]中即保存了MCU的ID。
注:256K Flash或以上容量的STM32,僅“Z”版本才有,之前的“A”版本沒有。
1、STM32對內(nèi)部Flash的保護措施
所有STM32的芯片都提供對Flash的保護,防止對Flash的非法訪問 - 寫保護和讀保護。
1)、讀保護即大家通常說的“加密”,是作用于整個Flash存儲區(qū)域。一旦設置了Flash的讀保護,內(nèi)置的Flash存儲區(qū)只能通過程序的正常執(zhí)行才能讀出,而不能通過下述任何一種方式讀出:
通過調(diào)試器(JTAG或SWD);
從RAM中啟動并執(zhí)行的程序;
2)、寫保護是以四頁(1KB/頁) Flash存儲區(qū)為單位提供寫保護,對被保護的頁實施編程或擦除操作將不被執(zhí)行,同時產(chǎn)生操作錯誤標志。
讀與寫設置的效果見下表:
讀保護 寫保護 對Flash的操作功能
有效 有效 CPU只能讀,禁止調(diào)試和非法訪問。
有效 無效 CPU可以讀寫,禁止調(diào)試和非法訪問,頁0~3為寫保護。
無效 有效 CPU可讀,允許調(diào)試和非法訪問。
無效 無效 CPU可以讀寫,允許調(diào)試和非法訪問。
2、當Flash讀保護生效時,CPU執(zhí)行程序可以讀受保護的Flash區(qū),但存在兩個例外情況:
1)、調(diào)試執(zhí)行程序時;
2)、從RAM啟動并執(zhí)行程序時
STM32還提供了一個特別的保護,即對Flash存儲區(qū)施加讀保護后,即使沒有啟用寫保護,F(xiàn)lash的第 0 ~ 3 頁也將處于寫保護狀態(tài),這是為了防止修改復位或中斷向量而跳轉(zhuǎn)到RAM區(qū)執(zhí)行非法程序代碼。
3、Flash保護相關函數(shù)
FLASH_Unlock(); //Flash解鎖
FLASH_ReadOutProtection(DISABLE); //Flash讀保護禁止
FLASH_ReadOutProtection(ENABLE); //Flash讀保護允許
CRC
1、CRC計算公式
所有的STM32芯片都內(nèi)置了一個硬件的CRC計算模塊,可應用到通信程序中,這個CRC計算模塊使用常見的、在以太網(wǎng)中使用的計算多項式:
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1
寫成16進制就是:0x04C11DB7
2、使用這個內(nèi)置CRC模塊操作步驟:
復位CRC模塊(設置CRC_CR0x01),這個操作把CRC計算的余數(shù)初始化為0xFFFFFFFF
把要計算的數(shù)據(jù)按每32位分割為一組數(shù)據(jù)字,并逐個地把這組數(shù)據(jù)字寫入CRC_DR寄存器(既下圖中的綠色框)
寫完所有的數(shù)據(jù)字后,就可以從CRC_DR寄存器(既下圖中的蘭色框)讀出計算的結果。
注意:雖然讀寫操作都是針對CRC_DR寄存器,但實際上是訪問的不同物理寄存器。
電子發(fā)燒友App










評論