STM32有2種方式產(chǎn)生隨機數(shù):硬件方式和軟件方式
軟件方式
其中軟件方式可以通過C語言標準函數(shù)stdlib.h
的srand()
和rand()
來獲取隨機數(shù),使用步驟為:
- 使用
srand(seed)
來設(shè)置隨機數(shù)種子。我們知道種子不改變的時候,產(chǎn)生多個隨機數(shù)的時候,第一次產(chǎn)生的數(shù)字是隨機的,后面產(chǎn)生的都與第一次相同。在單片機中,種子通??梢栽O(shè)置為定時器的一個計數(shù)值,也可以通過采集某個GPIO引腳懸空時的值作為隨機數(shù)的種子 - 通過
rand()
函數(shù)獲取一個隨機數(shù)
硬件方式
STM32F4 自帶了硬件隨機數(shù)發(fā)生器(RNG),RNG 處理器是一個以連續(xù)模擬噪聲為基礎(chǔ)的隨機數(shù)發(fā)生器,在主機讀數(shù)時提供一個 【32 位】的隨機數(shù)
(即隨機數(shù)的范圍是0~2^32-1)
隨機數(shù)獲取的方式:文章來源:http://www.zghlxwxcb.cn/news/detail-657761.html
#include "rng.h"
#include "delay.h"
#include "sys.h"
//返回0 初始化成功,返回1初始化失敗
u8 RNG_Init(void)
{
u16 i;
delay_init(168);
//使能RNG時鐘
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE); //使能RNG時鐘,在AHB2總線上
//使能RNG
RNG_Cmd(ENABLE);//使能RNG
while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0){ //等待DRDY穩(wěn)定,穩(wěn)定之后不為0,返回1
i++;
delay_us(100);
if(i >= 10000){
return 1; //超時強制返回
}
}
return 0;
}
//讀取數(shù)值函數(shù)
u32 RNG_Get_RandomNum(void)
{
while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0); //等待穩(wěn)定
return RNG_GetRandomNumber(); //獲取并返回數(shù)值
}
//獲取指定范圍[min, max]的隨機數(shù)
int RNG_Get_RandnomRange(int min, int max)
{
return min + RNG_Get_RandomNum()%(max-min+1); //使數(shù)據(jù)位于某個范圍
}
在主函數(shù)中獲取一個隨機數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-657761.html
int x = RNG_Get_RandnomRange(100, 300) // 獲取100~300的隨機數(shù)
到了這里,關(guān)于STM32產(chǎn)生隨機數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!