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

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);}

http://www.xdnf.cn/news/14385.html

相关文章:

  • 编译链接实战(32)动态库的本质和原理
  • 循环神经网络及其变体
  • 数据库核心技术深度剖析:事务、索引、锁与SQL优化实战指南(第六节)-----InnoDB引擎
  • 软件设计模式入门
  • 力扣Hot100每日N题(17~18)
  • Vue学习001-创建 Vue 应用
  • anaconda安装教程
  • 板凳-------Mysql cookbook学习 (十--7)
  • 使用pinia代替vuex处理登录流程
  • 什么是扩展运算符?有什么使用场景?
  • 强化学习怎么入门?
  • Vue3 跨多个组件方法调用:简洁实用的解决方案
  • 人工智能基础知识笔记十:降维技术
  • cache的学习
  • 扣子开发平台 Agent 开发教程(一)
  • Adoquery 转AdoDataSet
  • LeetCode 1385.两个数组间的距离值
  • Kafka 可靠性保障:消息确认与事务机制(一)
  • vue3 +spring boot文件上传
  • 【Go语言-Day 1】扬帆起航:从零到一,精通 Go 语言环境搭建与首个程序
  • 操作系统核心名词解释--期末简答题快速复习
  • cuda编程笔记(2.5)--简易的应用代码
  • 利用 Python 爬虫获取 Amazon 商品详情:实战指南
  • HarmonyOS 探秘手记:我在 “鸿蒙星球” 的第一天
  • linux 常用工具的静态编译之二
  • 数字孪生赋能智慧城市大脑建设方案PPT(65页)
  • vscode通过ssh连接
  • 理解ES6中的Promise
  • SAP-增删改查
  • 中介者模式Mediator Pattern