当前位置: 首页 > news >正文

STM32 HAL库学习 RNG篇

RNG 指的是STM32 单片机带有的硬件随机数生成器功能,通过这个硬件功能可以生成真随机数。功能明确,使用简单。

1、HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)

RNG_HandleTypeDef hrng;void MX_RNG_Init(void)
{hrng.Instance = RNG;hrng.Init.ClockErrorDetection = RNG_CED_DISABLE; //时钟出错监测不开启if (HAL_RNG_Init(&hrng) != HAL_OK){Error_Handler();}
}

初始化函数,内部只需要对时钟出错是否监测功能开启与否的一个选择,因为RNG功能的真随机数生成需要使用时钟作为信号源,不同于其他的软件生成一般利用当前的时间作为信号源,所以对时钟的有所要求。

2、void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)

初始化回调函数,被函数1自动调用。用于配置信号源的选择和开启外设时钟,此处选择的信号源为LSE。除了可以选择这个时钟之外还有低速内部时钟48M、LSI、PLL的分频时钟可以做选择。如果选择的时钟源不存在程序会在此处卡死。

void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)
{RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};if(rngHandle->Instance==RNG){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_LSE;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK){Error_Handler();}__HAL_RCC_RNG_CLK_ENABLE();}
}

3、HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit)

主要函数,生成随机数据。此处使用了非中断生成的方法,还可以使用中断生成的方法。

   uint32_t randnum = 0;while (1){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);HAL_RNG_GenerateRandomNumber(&hrng,&randnum);K_Printf("RandNumber is %d\n",randnum);rt_thread_mdelay(500);}

4、HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber_IT(RNG_HandleTypeDef *hrng)

5、void RNG_IRQHandler(void)

6、void HAL_RNG_IRQHandler(RNG_HandleTypeDef *hrng)

7、void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef *hrng, uint32_t random32bit)

四个函数作用是使用中断模式来生成随机数据。在配置的时候需要开启中断才可以使用。

void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)
{RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};if(rngHandle->Instance == RNG){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;PeriphClkInitStruct.RngClockSelection    = RCC_RNGCLKSOURCE_LSE;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);__HAL_RCC_RNG_CLK_ENABLE();HAL_NVIC_EnableIRQ(RNG_IRQn);HAL_NVIC_SetPriority(RNG_IRQn,0,1);}}void RNG_IRQHandler(void)
{HAL_RNG_IRQHandler(&hrng);}void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef *hrng, uint32_t random32bit)
{K_Printf("RandNumber is %d\n",random32bit);}
//主循环中
...while (1){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);HAL_RNG_GenerateRandomNumber_IT(&hrng); //开启中断 获取随机数rt_thread_mdelay(500);}

相关文章:

  • 解决访问美国网站慢百度云链接
  • 美国免费建站平台百度写作助手
  • excel可以做网站吗优化网站打开速度
  • 织梦怎么做英文版网站网络营销首先要进行
  • 中国做网站最好的公司济源新站seo关键词排名推广
  • 网站底部友情链接怎么做的营销型网站建设实训总结
  • 国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio平台与Cherry Studio搭建知识库问答助手
  • 【运维系列】【ubuntu22.04】安装Docker
  • Matlab | matlab中100个常用函数全面解析
  • Spring事务简介
  • wordpress外贸独立站搭建步骤
  • 构建多智能体(AI Agent)的高效协作平台——CrewAI探索
  • 从代码学习深度学习 - 词的相似性和类比任务 PyTorch版
  • 电池预测 | 第32讲 Matlab基于CNN-BiLSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集
  • 【系统设计【3】】系统设计面试框架:从理论到实践的完整指南
  • Tomcat 配置双击启动
  • java 设计模式_行为型_19命令模式
  • Django 5.2.3 构建的图书管理系统
  • Linux-多线程安全
  • 【详细】CUDA开发学习教程清单
  • 全国产超小体积RK3576核心板,支持RK3576+FPGA,支持AI与实时控制
  • 搭建K8s集群平台(详细版)
  • FPGA中的DMA技术
  • idea 运行报错
  • 6.14打卡