一知半解学习环境:
1、CubeMX 4.23.0
2、uVision 5.14.2
3、MCU 启明 STM32F407 开发板(高配版) V3.1
一知半解学习目标:
1、掌握CubeMX下RCC以及SYS的相关配置;
2、掌握CubeMX下串口打印的相关配置;
3、掌握CubeMX下RNG(随机数发生器)的启用;
一知半解实现过程:
1、配置系统调试接口及时基时钟源;

2、配置外部高速时钟源;

3、根据原理图配置对应串口(USART1);


4、配置时钟树;

5、配置串口参数,保持默认参数即可;

6、使能RNG功能模块;

7、生成工程,并添加程序;
首先,打开工程,在usart.c文件的最后添加如下程序;

/* USER CODE BEGIN 1 */
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* 使用的串口可根据实际配置修改 */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
其次,在main.c循环中添加打印信息;

/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
HAL_RNG_GenerateRandomNumber(&hrng,&random_num);
printf("随机数发生器产生的随机数为: %x\n",random_num);
}
/* USER CODE END 3 */
8、串口调试助手打印验证;

一知半解套路回顾:
1、掌握CubeMX配置的常规套路,如SYS、RCC以及时钟树的配置等;
2、巩固CubeMX串口打印的配置方法;
3、学会使用RNG(随机数发生器)的功能;