什么网站做企业邮箱服务,单页网站cms,中国建设网官方网站企业登录,太原搭建网站的公司哪家好STM32F4X RNG随机数发生器 随机数的作用STM32F4X 随机数发生器RNG控制寄存器RNG状态寄存器RNG数据寄存器RNG数据步骤RNG例程 随机数的作用
随机数顾名思义就是随机产生的数字#xff0c;这种数字最大的特点就是其不确定性#xff0c;你不知道它下一次产生的数字是什么。随机… STM32F4X RNG随机数发生器 随机数的作用STM32F4X 随机数发生器RNG控制寄存器RNG状态寄存器RNG数据寄存器RNG数据步骤RNG例程 随机数的作用
随机数顾名思义就是随机产生的数字这种数字最大的特点就是其不确定性你不知道它下一次产生的数字是什么。随机数被广泛应用于密码学、模拟实验、游戏开发领域等。
STM32F4X 随机数发生器
RNG控制寄存器 RNG的控制寄存器的bit0使能随机数发生器是否工作bit1则使能是否使用中断
RNG状态寄存器 状态寄存器是判断随机数发生器工作是否正常通过判断状态寄存器的位可以知道随机数是否产生是否正确
RNG数据寄存器 如果上面的随机数的状态寄存器里面的状态都没有异常而且数据已经准备就绪了用户就可以读取数据寄存器把随机数读出来。
RNG数据步骤
STM32F4X的数据手册给出了随机数发生器的使用步骤
RNG例程
#include rng.hvoid rng_init(void)
{NVIC_InitTypeDef NVIC_InitStruct;RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE); // 使能RNG时钟#ifdef RNG_INITNVIC_InitStruct.NVIC_IRQChannel HASH_RNG_IRQn; // 中断编号NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 2; // 抢占优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority 2; // 响应优先级为1NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE; // 使能中断NVIC_Init(NVIC_InitStruct); // 初始化中断RNG_ITConfig(ENABLE);#endif RNG_Cmd(ENABLE);}uint32_t get_rng_randomdata(void)
{static uint32_t first_random_num 0,second_random_num 0,count 0;if(RNG_GetFlagStatus(RNG_FLAG_CECS | RNG_FLAG_SECS) RESET) // 判断CECS 和 SECS{if(RNG_GetFlagStatus(RNG_FLAG_DRDY) SET) // 判断随机数是都准备好{count;if (count 0xFFFFFFFF)count 0;if (count 1)return;second_random_num first_random_num;first_random_num RNG_GetRandomNumber(); // 读取随机数if(first_random_num ! second_random_num) // 本次生成的随机数跟上一次生成的随机数对比printf(random create success %8X %8X\r\n,first_random_num,second_random_num);else printf(random create fail \r\n);}RNG_ClearFlag(RNG_FLAG_CECS | RNG_FLAG_SECS);}return 0;
}void HASH_RNG_IRQHandler(void)
{static uint32_t first_random_num 0,second_random_num 0,count 0;if(RNG_GetITStatus(RNG_IT_CEI | RNG_IT_SEI) RESET){if(RNG_GetFlagStatus(RNG_FLAG_DRDY) SET){count;if (count 0xFFFFFFFF)count 0;if (count 1)return;second_random_num first_random_num;first_random_num RNG_GetRandomNumber(); // 读取随机数if(first_random_num ! second_random_num) // 本次生成的随机数跟上一次生成的随机数对比printf(random create success %8X %8X\r\n,first_random_num,second_random_num);else printf(random create fail \r\n);}RNG_ClearITPendingBit(RNG_IT_CEI | RNG_IT_SEI);}}