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

单片机RNG实验

单片机 :STM32F407
开发板:DMF407电机开发板
平台:keil V5.31

HSE 为8MHZ
HSI为16MHZ

产生随机数。

主函数:

int main(void) { uint32_t random; uint8_t t = 0, key; HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */ delay_init(168); /* 延时初始化 */ usart_init(115200); /* 串口初始化为115200 */ usmart_dev.init(84); /* 初始化USMART */ led_init(); /* 初始化LED */ lcd_init(); /* 初始化LCD */ key_init(); /* 初始化按键 */ lcd_show_string(30, 50, 200, 16, 16, "STM32", RED); lcd_show_string(30, 70, 200, 16, 16, "RNG TEST", RED); lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED); while (rng_init()) /* 初始化随机数发生器 */ { lcd_show_string(30, 110, 200, 16, 16, " RNG Error! ", RED); delay_ms(200); lcd_show_string(30, 110, 200, 16, 16, "RNG Trying...", RED); } lcd_show_string(30, 110, 200, 16, 16, "RNG Ready! ", RED); lcd_show_string(30, 130, 200, 16, 16, "KEY0:Get Random Num", RED); lcd_show_string(30, 150, 200, 16, 16, "Random Num:", RED); lcd_show_string(30, 180, 200, 16, 16, "Random Num[0-9]:", RED); while (1) { key = key_scan(0); if (key == KEY0_PRES) { random = rng_get_random_num(); lcd_show_num(30 + 8 * 11, 150, random, 10, 16, BLUE); } if ((t % 20) == 0) { LED0_TOGGLE(); /* 每200ms,翻转一次LED0 */ random = rng_get_random_range(0, 9); /* 取[0,9]区间的随机数 */ lcd_show_num(30 + 8 * 16, 180, random, 1, 16, BLUE);/* 显示随机数 */ } delay_ms(10); t++; } }

配置:

uint8_t rng_init(void) { uint16_t retry = 0; g_rng_handle.Instance = RNG; HAL_RNG_DeInit(&g_rng_handle); HAL_RNG_Init(&g_rng_handle); /* 初始化RNG */ while (__HAL_RNG_GET_FLAG(&g_rng_handle, RNG_FLAG_DRDY) == RESET && retry < 10000) /* 等待RNG准备就绪 */ { retry++; delay_us(10); } if (retry >= 10000) { return 1; /* 随机数产生器工作不正常 */ } return 0; } void HAL_RNG_MspInit(RNG_HandleTypeDef *hrng) { __HAL_RCC_RNG_CLK_ENABLE();/* 使能RNG时钟 */ } uint32_t rng_get_random_num(void) { uint32_t randomnum; HAL_RNG_GenerateRandomNumber(&g_rng_handle, &randomnum); return randomnum; } int rng_get_random_range(int min, int max) { uint32_t randomnum; HAL_RNG_GenerateRandomNumber(&g_rng_handle, &randomnum); return randomnum%(max-min+1) + min; }

按键产生一个随机数;定时间间隔产生一个一定范围内的随机数。

测试结果:

random = rng_get_random_range(0, 999); /* 取[0,999]区间的随机数 */
lcd_show_num(30 + 8 * 16, 180, random, 3, 16, BLUE);/* 显示随机数 */

http://www.rkmt.cn/news/1419107.html

相关文章:

  • NeRF卷王之争:深度拆解Mega-NeRF如何用‘分而治之’搞定城市级建模,对比Block-NeRF、CityNeRF谁更强?
  • 别再手动数数了!用Excel的COUNTIFS函数,5分钟搞定学生获奖统计表
  • Pot桌面应用深度调试指南:跨平台翻译软件的开发与调试实践
  • 2026年热门的手持超声波焊接机/超声波塑料焊接机/无锡超声波点焊机/全自动超声波焊接机用户口碑推荐厂家 - 行业平台推荐
  • 科望医药冲刺港股:2025年无收入 净亏1.55亿 高瓴与腾讯是股东
  • 从U.2接口到DPC协议:一次完整的NVMe热插拔,硬件和软件到底在忙些什么?
  • 基于Arduino Nano与N20电机的桌面机器人YAKSHA制作全攻略
  • 2026年热门的实验室干燥柜/PP 实验室家具生产厂家推荐 - 行业平台推荐
  • 【PCI】PCI设备访问及配置过程、虚拟PCIe switch方案(六)
  • 哪家25-30万五座SUV车型专业?2026年5月推荐TOP5对比家庭出游防空间局促评测案例适用场景 - 品牌推荐
  • 2026年靠谱的浙江扫地车/电动扫地车源头工厂推荐 - 行业平台推荐
  • 保姆级教程:在PyQt5 Designer里拖拽出你的第一个串口数据监控界面(附QChartView配置)
  • 哪家25-30万家用SUV车型专业?2026年5月推荐TOP5对比家庭出游舒适度评测案例价格 - 品牌推荐
  • 深度对话ChatGPT:探索AI创造力边界与高效人机协作实战
  • 2026年5月10款降AI率工具实测:嘎嘎降价格售后双优盘点
  • 2026年质量好的无锡超声波焊接模具/手持超声波焊接机/无锡超声波焊接/全自动超声波焊接机多家厂家对比分析 - 行业平台推荐
  • 职业倦怠的系统性防御与修复:从能量管理到心理韧性构建
  • 降AI率软件60块和240块差在哪?2026年TOP10工具价格盘点
  • 2026年评价高的盐城扫地车/地面扫地车推荐品牌厂家 - 品牌宣传支持者
  • 2026年比较好的安徽喷淋塔/喷淋塔/安徽洁净车间主流厂家对比评测 - 品牌宣传支持者
  • 2026年5月25-30万五座SUV车型推荐:TOP5排名评测专业性价比高适用场景 - 品牌推荐
  • 2026年比较好的盐城洗地机/江苏洗地机/扬州洗地机/淮安洗地机精选厂家推荐 - 品牌宣传支持者
  • AI欺骗问题:大模型为何自发说谎及其检测缓解策略
  • ChatGPT企业实战:AI客服、获客与数据分析三大场景落地指南
  • Python实战:用hashlib和random模块手把手教你生成安全密码并模拟破解(附完整代码)
  • 如何3分钟获取中小学电子课本?这款免费工具让教学资源获取效率提升85%
  • 微信投票怎么做,云帆投票一篇文章讲清楚 - 投票小程序
  • Breeze-7B-Instruct-v1_0微调教程:如何为特定任务定制你的专属模型
  • VisionPro 9.0 C#脚本性能优化实战:我是如何把工具块运行时间砍掉30%的
  • Linux系统启动的‘第一餐’:深入理解根文件系统rootfs的加载与1号进程的诞生