STM32F4學習筆記12 RNG隨機數發生器

2021-07-11 20:52:31 字數 2894 閱讀 6100

rng主要特性

rng 處理器是乙個以連續模擬雜訊為基礎的隨機數發生器,在主機讀數時提供乙個 32 位的 隨機數。

rng的主要特性

● 提供由模擬量發生器產生的 32 位隨機數

● 兩個連續隨機數的間隔為 40 個 pll48clk 時鐘訊號週期

● 通過監視 rng 熵來標識異常行為(產生穩定值,或產生穩定的值序列)

● 可被禁止以降低功耗

rng功能描述

隨機數發生器採用模擬電路實現。此電路產生饋入線性反饋移位暫存器 (rng_lfsr) 的種子, 用於生成 32 位隨機數。

該模擬電路由幾個環形振盪器組成,振盪器的輸出進行異或運算以產生種子。rng_lfsr 由 專用時鐘 (pll48clk) 按恆定頻率提供時鐘資訊,因此隨機數質量與 hclk 頻率無關。當將 大量種子引入 rng_lfsr 後,rng_lfsr 的內容會傳入資料暫存器 (rng_dr)。

同時,系統會監視模擬種子和專用時鐘 pll48clk。狀態位(rng_sr 暫存器中)指示何時 在種子上出現異常序列,或指示何時 pll48clk 時鐘頻率過低。檢測到錯誤時生成中斷。

操作 要執行 rng,請按以下步驟操作:

1.如果需要,使能中斷(為此,將 rng_cr 暫存器中的 ie 位置 1)。準備好隨機數時或 出現錯誤時生成中斷。

2. 通過將 rng_cr 暫存器中的 rngen 位置 1 使能隨機數產生。這會啟用模擬部分、rng_lfsr 和錯誤檢測器。

3. 每次中斷時,檢查確認未出現錯誤(rng_sr 暫存器中的 seis 和 ceis 位應為 0), 並且隨機數已準備就緒(rng_sr 暫存器中的 drdy 位為 1)。然後即可讀取 rng_dr 暫存器中的內容。

按照 fips pub(聯邦資訊處理標準出版物)140-2 的要求,將 rngen 位置 1 後產生的第 乙個隨機數不應使用,但應儲存起來,與產生的下乙個隨機數進行比較。隨後產生的每個隨機數都需要與產生的上乙個隨機數進行比較。如果任何一對進行比較的數字相等,則測試失敗(連續隨機數發生器測試)

錯誤管理

如果 ceis 位的值為 1(時鐘錯誤)

出現時鐘錯誤時,rng 無法再產生隨機數,因為 pll48clk 時鐘不正確。檢查時鐘控制器是 否正確配置,是否可提供 rng 時鐘,然後將 ceis 位清零。當 cecs 位為 0 時,rng 可正 常工作。時鐘錯誤對產生的上乙個隨機數沒有影響,因此 rng_dr 暫存器內容可以使用。

如果 seis 位的值為 1(種子錯誤)

出現種子錯誤時,只要 secs 位為 1,就會中斷隨機數產生。如果 rng_dr 暫存器中有可 用隨機數,不能使用該隨機數,因為它可能沒有足夠的熵。

應執行以下操作:將 seis 位清零,然後將 rngen 位清零並置 1,以便重新初始化和重新 啟動 rng。

stm32f4的rng庫

如何使用rng驅動

1.通過函式rcc_ahb2periphclockcmd(rcc_ahb2perph_rng,enable)使能rng控制器時鐘。

2.通過函式rng_cmd()使能rng。

3.等待直到隨機數發生器產生有效的隨機數(中斷或查詢模式)。

4.通過函式rng_getrandomnumber()得到隨機數。

從上面第三步開始繼續得到後面的隨機數。

初始化和配置函式

這部分函式主要提供以下功能

· 初始化rng外設

· 使能或禁止rng外設。

void rng_deinit()功能:從新初始化rng外設暫存器資料到復位值。

void rng_cmd(functionanstate newstate)功能:使能或禁止rng

得到32位隨機數函式

uint32_t rng_getrandomnumber(void)

函式功能:返回32位隨機數

呼叫此函式之前需要等待直到drdy標誌置位,呼叫函式rng_getflagstatus(rng_flag_drdy)進行等待標誌位。每次在的呼叫rng_getrandomnumber(void)後rng_flag_drdy標誌自動清除。

在seed錯誤的情況下只要secs位是1,隨機數產生將被中斷。如果rng_dr暫存器中有資料可用,但是請不要使用,應為沒有足夠的entopy。這種情況下推薦使用者通過函式rng_clearflag(rng_flag_secs)清除seis標誌,然後禁止並重新使能rng外設(通過函式rng_cmd())來從新初始化和啟動rng。

在時鐘錯誤的情況下,應為pll48clk時鐘的不準確,rng將無法產生隨機數。檢查是否正確配置時鐘控制器rng時鐘,同時清除ceis(通過函式rng——clearflag(rng_flag_cecs))位。當cecs位是0的時候rng次啊能正常工作。時鐘錯誤對先前殘生的隨機數沒有影響,rng_dr暫存器中的資料仍然可以使用。

中斷標誌管理

· 標誌

rng_flag_drdy:rng_dr暫存器有有效隨機數時,通過讀此暫存器來清除標誌(可通過函式rng_getrandomnumber()實現)。

rng_flag_cecs:seed檢測錯誤

rng_flag_secs:時鐘檢測錯誤

· 中斷

如果是能了rng中斷,下面三種情況殭屍的rng中斷會被掛起。

rng_dr暫存器含有有效的隨機數,只有通過讀rng_dr暫存器才能清除中斷源,也就是清除中斷掛起標誌。

發生seed錯誤,檢測到下面的錯誤序列之一:

64個以上的的連續位都是0或者1

32個以上出現連續的01.

通過函式rng_clearitpendingbit(rng_it_sei)清除此中斷源。

發生時鐘錯誤,pll48clk不能被正確的檢測到(fpll8cl

stm32f4 定時捕獲

概述 1000hz 20 80 占空比現象 1000hz 51 58 占空比現象 關於本文的更多詳情請往下看。筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的 對初學者一看就明白,以簡單明瞭的工程供大家學習。stm32f4 tim輸入波形捕獲 脈衝頻率 占空比 例項 訪問密碼 st...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F4學習資源及方法

一 參考書 stm32f4xx中文參考手冊 stm32f3與f4系列cortexm4核心程式設計手冊 cortex m3與m4權威指南 1.stm32f4xx中文參考手冊 是st官方資料,包含了stm32f4各種暫存器及功能詳細介紹。2.stm32f3與f4系列cortexm4核心程式設計手冊 是對...