野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29081|回复: 3

STM32学习笔记之F1产生随机数控制全彩灯

[复制链接]
发表于 2018-4-24 11:18:24 | 显示全部楼层 |阅读模式
最近在捣鼓控制RGB全彩灯的实验;我看了火哥F4板子上的全彩灯程序,是通过随机数发生器产生随机数,然后修改TIM定时器中各通道比较寄存器的值改变占空比控制RGB;但是我用的是F1的,没有F2/F4中那样能够产生随机数的函数;所以借鉴了网上的一些思路。F1产生随机数可以结合C库来实现;主要函数就是srand(unsigned seed)和rand()两个函数,srand(unsigned seed)通过修改seed的值,可以为rand()提供不同的伪随机数数列;rand()函数就可以产生一系列的随机数。而这个种子怎么来,网友给了很多方法,这里可以使用悬空的ADC来实现,如下图一;还有说可以用srand((uint16_t)time(NULL))来作种子源,但是编译的时候会出错。这个方法需要包含time.h,所以我看了下这个头文件,把这个函数改成了srand((uint16_t)clock()),编译通过了,我看了串口,好像也可以产生随机数,具体正确与否,我布吉岛,我是真的很新手,求火哥和友友指点下,如下图二。




图一

图一

图二

图二
回复

使用道具 举报

发表于 2018-4-24 13:49:21 | 显示全部楼层
是这样的,通过adc提供种子,你测试下,每次复位后的数字不同那就对了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-25 17:46:02 | 显示全部楼层
魚丸粗麵 发表于 2018-4-24 13:49
是这样的,通过adc提供种子,你测试下,每次复位后的数字不同那就对了

用ADC作种子确实可以。那个时钟怎么做种子的啊?我只能这么改srand((uint16_t)clock()),改了之后好像也行。但是软件仿真看着又好像有点规律
回复 支持 反对

使用道具 举报

发表于 2021-3-24 15:08:56 | 显示全部楼层
用ADC作种子,复位之后的随机数和之前的一样
浮空引脚ADC随机数.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-18 11:50 , Processed in 0.029413 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表