匿名
未登录
登录
丢石头百科
搜索
查看“STM32CubeMX系列教程16:RNG和CRC”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
STM32CubeMX系列教程16:RNG和CRC
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<b>一、随机数发生器(RNG)</b> RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。 复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置,激活随机数发生器(RNG)。 [[File:171823xj7b8oyyejjxbe7l.png]] 配置RNG时钟为48MHz。RNG没有参数配置。 [[File:171824xeblfmicscblm6z6.png]] 生成报告以及代码,编译程序。在iwdg.c文件中可以看到RNG初始化函数。在stm32f7xx_hal_rng.h头文件中可以看到RNG的操作函数。 在main函数while循环中添加应用函数每隔1s打印输出一个随机数。 <syntaxhighlight lang="python"> /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("\n\r Random 32bit Numbers : 0x%08X !!!\n\r",HAL_RNG_GetRandomNumber(&hrng)); HAL_Delay(1000); } /* USER CODE END 3 */</syntaxhighlight> 编译程序并下载到开发板。打开串口调试助手,设置波特率为115200,串口助手上面会显示如下信息。 [[File:171922a9t962rejm4jzeep.png]] <b>二、循环冗余校验(CRC)</b> CRC(循环冗余校验)计算单元使用一个多项式发生器从 8 位 /16 位 /32 位的数据字中产生CRC 码。 关于CRC在这里不作详细的介绍,有兴趣详细了解的同学可以看下面的神贴: CRC不太懂?哥救你【连载一】 CRC不太懂?哥救你【连载二】 CRC不太懂?哥救你【连载三】 [[File:171825d2r5k5eepigv65p5.png]] 复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开的工程文件重新配置,激活CRC。 [[File:171826zyvi5v4qqpwvs23x.png]] CRC配置中只需设置输入数据格式(Input Data Format)为32位数据(Words),其他为默认设置。 [[File:171826v68v13nxku6gedux.png]] 生成报告以及代码,编译程序。在crc.c文件中可以看到CRC初始化函数。在stm32f7xx_hal_crc.h头文件中可以看到CRC的操作函数。 在main文件前面添加数据以及数据CRC的生成值。 <syntaxhighlight lang="python"> /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ #define BUFFER_SIZE 114 static const uint32_t aDataBuffer[BUFFER_SIZE] = { 0x00001021, 0x20423063, 0x408450a5, 0x60c670e7, 0x9129a14a, 0xb16bc18c, 0xd1ade1ce, 0xf1ef1231, 0x32732252, 0x52b54294, 0x72f762d6, 0x93398318, 0xa35ad3bd, 0xc39cf3ff, 0xe3de2462, 0x34430420, 0x64e674c7, 0x44a45485, 0xa56ab54b, 0x85289509, 0xf5cfc5ac, 0xd58d3653, 0x26721611, 0x063076d7, 0x569546b4, 0xb75ba77a, 0x97198738, 0xf7dfe7fe, 0xc7bc48c4, 0x58e56886, 0x78a70840, 0x18612802, 0xc9ccd9ed, 0xe98ef9af, 0x89489969, 0xa90ab92b, 0x4ad47ab7, 0x6a961a71, 0x0a503a33, 0x2a12dbfd, 0xfbbfeb9e, 0x9b798b58, 0xbb3bab1a, 0x6ca67c87, 0x5cc52c22, 0x3c030c60, 0x1c41edae, 0xfd8fcdec, 0xad2abd0b, 0x8d689d49, 0x7e976eb6, 0x5ed54ef4, 0x2e321e51, 0x0e70ff9f, 0xefbedfdd, 0xcffcbf1b, 0x9f598f78, 0x918881a9, 0xb1caa1eb, 0xd10cc12d, 0xe16f1080, 0x00a130c2, 0x20e35004, 0x40257046, 0x83b99398, 0xa3fbb3da, 0xc33dd31c, 0xe37ff35e, 0x129022f3, 0x32d24235, 0x52146277, 0x7256b5ea, 0x95a88589, 0xf56ee54f, 0xd52cc50d, 0x34e224c3, 0x04817466, 0x64475424, 0x4405a7db, 0xb7fa8799, 0xe75ff77e, 0xc71dd73c, 0x26d336f2, 0x069116b0, 0x76764615, 0x5634d94c, 0xc96df90e, 0xe92f99c8, 0xb98aa9ab, 0x58444865, 0x78066827, 0x18c008e1, 0x28a3cb7d, 0xdb5ceb3f, 0xfb1e8bf9, 0x9bd8abbb, 0x4a755a54, 0x6a377a16, 0x0af11ad0, 0x2ab33a92, 0xed0fdd6c, 0xcd4dbdaa, 0xad8b9de8, 0x8dc97c26, 0x5c644c45, 0x3ca22c83, 0x1ce00cc1, 0xef1fff3e, 0xdf7caf9b, 0xbfba8fd9, 0x9ff86e17, 0x7e364e55, 0x2e933eb2, 0x0ed11ef0 }; /* Expected CRC Value */ uint32_t uwExpectedCRCValue = 0x379E9F06; /* USER CODE END PV */</syntaxhighlight> 在main函数中添加用程序计算数据的CRC值并校验是否和正确的CRC值相等,打印输出校验信息。 <syntaxhighlight lang="python"> /* USER CODE BEGIN 2 */ printf("\n\r ****** CRC Test Example *****\n\r"); /*##-1- Compare the CRC value to the Expected one ##########################*/ if(HAL_CRC_Accumulate(&hcrc, (uint32_t *)aDataBuffer, BUFFER_SIZE) != uwExpectedCRCValue) printf("\n\r CRC wrong value \n\r"); else printf("\n\r CRC right value \n\r"); /* USER CODE END 2 */</syntaxhighlight> <syntaxhighlight lang="python"> </syntaxhighlight> 编译程序并下载到开发板。打开串口调试助手,设置波特率为115200,串口助手上面会显示如下信息。 [[File:171827h99hw3unn7hrn5kk.png]]
返回至
STM32CubeMX系列教程16:RNG和CRC
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志