这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请问M480的TRNG功能如何使用外部晶振做时钟源?

共2条 1/1 1 跳转至

请问M480的TRNG功能如何使用外部晶振做时钟源?

工程师
2024-10-08 10:11:35     打赏

请问M480的TRNG功能,如何使用外部晶振做时钟源?我做了一个PCB,上面没有32K晶振,貌似无法使用TRNG功能




关键词: 晶振     时钟源    

助工
2024-10-08 10:11:58     打赏
2楼

M480 的 TRNG(True Random Number Generator)功能可以使用外部晶振作为时钟源。下面是使用外部晶振作为时钟源的步骤:

1. 首先,你需要在 PCB 上添加一个外部的时钟源(例如 32K 晶振)并将其连接到 M480 的外部时钟输入引脚(X32IN)。
2. 在使用 TRNG 功能之前,你需要先初始化时钟系统,设置时钟源为外部晶振。具体的初始化代码如下:

```c
#include "NuMicro.h"

void SYS_Init(void)
{
    /* 开启晶振输入引脚的外部时钟源 */
    CLK_EnableXtalRC(CLK_PWRCTL_HIRC_EN_Msk | CLK_PWRCTL_HXT_EN_Msk | CLK_PWRCTL_LXT_EN_Msk);
    CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk | CLK_STATUS_HXTSTB_Msk | CLK_STATUS_LXTSTB_Msk);
   
    /* 将系统时钟切换为外部低频晶振 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT, CLK_CLKDIV0_HCLK(1));
    CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);
   
    /* 关闭其他不需要的时钟源 */
    CLK_DisableCKO();
    CLK_DisableSysTick();
}
```

3. 在你的应用程序中,你可以使用 `TRNG_Open()` 函数来初始化 TRNG 模块,具体的代码如下:

```c
#include "NuMicro.h"

int main(void)
{
    /* 系统初始化 */
    SYS_Init();
   
    /* 打开 TRNG 模块,使用外部晶振作为时钟源 */
    TRNG_Open(TRNG_MODULE, TRNG_CLKSRC_HXT);
   
    while(1)
    {
        /* 等待 TRNG 数据就绪 */
        while(!TRNG_GET_IF(TRNG_MODULE));
        
        /* 读取 TRNG 数据 */
        uint32_t randomData = TRNG_Read(TRNG_MODULE);
        
        /* TODO: 处理 TRNG 数据 */
    }
}
```


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]