打印
[其他]

HC32 L1 常用库函数

[复制链接]
1043|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoke231|  楼主 | 2021-1-13 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**
*****************************************************************************
** \brief 随机数初始化(上电第一次生成随机数)
**
**
** \retval TRUE or FALSE                                      
*****************************************************************************/
en_result_t Trng_Init(void)
{
    //==>>生成64bits随机数(上电第一次)
    M0P_TRNG->CR_f.RNGCIR_EN = 1;
    //模式配置0
    M0P_TRNG->MODE_f.LOAD    = 1;
    M0P_TRNG->MODE_f.FDBK    = 1;
    M0P_TRNG->MODE_f.CNT     = 6;
    //生成随机数0
    M0P_TRNG->CR_f.RNG_RUN  = 1;
    while(M0P_TRNG->CR_f.RNG_RUN)
    {
        ;
    }

    //模式配置1
    M0P_TRNG->MODE_f.LOAD    = 0;
    M0P_TRNG->MODE_f.FDBK    = 0;
    M0P_TRNG->MODE_f.CNT     = 4;
    //生成随机数1
    M0P_TRNG->CR_f.RNG_RUN  = 1;
    while(M0P_TRNG->CR_f.RNG_RUN)
    {
        ;
    }

    //关闭随机源电路,节省功耗
    M0P_TRNG->CR_f.RNGCIR_EN = 0;

    return Ok;
}

使用特权

评论回复
沙发
gaoke231|  楼主 | 2021-1-13 21:36 | 只看该作者
/**
*****************************************************************************
** \brief 生成随机数(非上电第一次生成随机数)
**
**
** \retval TRUE or FALSE                                      
*****************************************************************************/
en_result_t Trng_Generate(void)
{
    //==>>生成64bits随机数(非上电第一次生成)
    M0P_TRNG->CR_f.RNGCIR_EN = 1;
   
    //模式配置0
    M0P_TRNG->MODE_f.LOAD    = 0;
    M0P_TRNG->MODE_f.FDBK    = 1;
    M0P_TRNG->MODE_f.CNT     = 6;
    //生成随机数0
    M0P_TRNG->CR_f.RNG_RUN  = 1;
    while(M0P_TRNG->CR_f.RNG_RUN)
    {
        ;
    }
   
    //模式配置1
    M0P_TRNG->MODE_f.FDBK    = 0;
    M0P_TRNG->MODE_f.CNT     = 4;
    M0P_TRNG->MODE_f.CNT     = 4;
    //生成随机数1
    M0P_TRNG->CR_f.RNG_RUN  = 1;
    while(M0P_TRNG->CR_f.RNG_RUN)
    {
        ;
    }

    //关闭随机源电路,节省功耗
    M0P_TRNG->CR_f.RNGCIR_EN = 0;   
   
    return Ok;
}

使用特权

评论回复
板凳
gaoke231|  楼主 | 2021-1-13 21:36 | 只看该作者
/**
*****************************************************************************
** \brief 随机数获取
**
** \retval data0                                    
*****************************************************************************/
uint32_t Trng_GetData0(void)
{
    return M0P_TRNG->DATA0;
}

使用特权

评论回复
地板
gaoke231|  楼主 | 2021-1-13 21:37 | 只看该作者
/**
*****************************************************************************
** \brief 随机数获取
**
** \retval data1                                    
*****************************************************************************/
uint32_t Trng_GetData1(void)
{
    return M0P_TRNG->DATA1;
}

使用特权

评论回复
5
gaoke231|  楼主 | 2021-1-13 21:44 | 只看该作者
/**
******************************************************************************
** \brief  UART通信中断使能函数设置
**
** \param [in] UARTx通道号,enIrqSel发送or接收中断使能
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_EnableIrq(M0P_UART_TypeDef* UARTx, en_uart_irq_sel_t enIrqSel)
{
    SetBit((uint32_t)(&(UARTx->SCON)), enIrqSel, TRUE);

    return Ok;
}

使用特权

评论回复
6
gaoke231|  楼主 | 2021-1-13 21:49 | 只看该作者
/**
******************************************************************************
** \brief  UART通信中断禁止函数设置
**
** \param [in] UARTx通道号,enIrqSel发送or接收中断禁止
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_DisableIrq(M0P_UART_TypeDef* UARTx, en_uart_irq_sel_t enIrqSel)
{
    SetBit((uint32_t)(&(UARTx->SCON)), enIrqSel, FALSE);
   
    return Ok;
}

使用特权

评论回复
7
gaoke231|  楼主 | 2021-1-13 21:58 | 只看该作者
/**
******************************************************************************
** \brief  UART通道多主机模式配置
**
** \param [in] UARTx通道号,stcMultiCfg多主机模式结构
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_SetMultiMode(M0P_UART_TypeDef* UARTx, stc_uart_multimode_t* pstcMultiCfg)
{
    if(NULL != pstcMultiCfg)
    {
        UARTx->SCON_f.ADRDET = TRUE;   
        UARTx->SADDR = pstcMultiCfg->u8SlaveAddr;
        UARTx->SADEN = pstcMultiCfg->u8SaddEn;

    }
    else
    {
        return ErrorInvalidParameter;
    }
   
    return Ok;
}

使用特权

评论回复
8
gaoke231|  楼主 | 2021-1-13 21:59 | 只看该作者
/**
******************************************************************************
** \brief  UART通道多机模式发送数据/地址帧配置TB8
**
** \param [in] UARTx 通道号
** \param [in] TRUE-TB8为地址帧标志;FALSE-TB8为数据帧标志;
**
** \retval Null
******************************************************************************/
void Uart_SetTb8(M0P_UART_TypeDef* UARTx, boolean_t bTB8Value)
{
    UARTx->SCON_f.B8CONT = bTB8Value;
   
}

使用特权

评论回复
9
gaoke231|  楼主 | 2021-1-13 22:01 | 只看该作者
/**
******************************************************************************
** \brief 获取RB8数值
**
** \param [in] UARTx通道号
**
** \retval RB8
******************************************************************************/
boolean_t Uart_GetRb8(M0P_UART_TypeDef* UARTx)
{
    return (UARTx->SBUF_f.DATA8);
}

使用特权

评论回复
10
gaoke231|  楼主 | 2021-1-13 22:29 | 只看该作者
/**
******************************************************************************
** \brief  UART通道多主机模式从机地址配置函数
**
** \param [in] UARTx通道号,addr地址
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_SetSaddr(M0P_UART_TypeDef* UARTx,uint8_t u8Addr)
{
    UARTx->SADDR = u8Addr;
   
    return Ok;
}

使用特权

评论回复
11
gaoke231|  楼主 | 2021-1-13 22:34 | 只看该作者
/**
******************************************************************************
** \brief  UART通道发送或接收等功能使能设置
**
** \param [in] UARTx通道号,enFunc功能
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_EnableFunc(M0P_UART_TypeDef* UARTx, en_uart_func_t enFunc)
{   
    SetBit((uint32_t)(&(UARTx->SCON)), enFunc, TRUE);
   
    return Ok;
}

使用特权

评论回复
12
gaoke231|  楼主 | 2021-1-13 23:16 | 只看该作者
/**
******************************************************************************
** \brief  UART通道发送或接收等功能禁止设置
**
** \param [in] UARTx通道号,enFunc功能
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_DisableFunc(M0P_UART_TypeDef* UARTx, en_uart_func_t enFunc)
{
    SetBit((uint32_t)(&(UARTx->SCON)), enFunc, FALSE);
   
    return Ok;
}

使用特权

评论回复
13
gaoke231|  楼主 | 2021-1-14 13:00 | 只看该作者
/**
******************************************************************************
** \brief  UART通道通信状态获取
**
** \param [in] UARTx通道号,enStatus获取哪个状态
**
** \retval 状态值
******************************************************************************/
boolean_t Uart_GetStatus(M0P_UART_TypeDef* UARTx, en_uart_status_t enStatus)
{
    boolean_t bStatus = FALSE;

     
    ASSERT(IS_VALID_STATUS(enStatus));

    bStatus =  GetBit((uint32_t)(&(UARTx->ISR)), enStatus);
   
    return bStatus;
}

使用特权

评论回复
14
gaoke231|  楼主 | 2021-1-14 13:14 | 只看该作者
/**
******************************************************************************
** \brief  UART通道通信状态清除
**
** \param [in] UARTx通道号
**
** \retval OK
** \retval ErrorInvalidParameter清除失败
******************************************************************************/
en_result_t Uart_ClrIsr(M0P_UART_TypeDef* UARTx)
{
    UARTx->ICR = 0u;
    return Ok;
}

使用特权

评论回复
15
gaoke231|  楼主 | 2021-1-14 13:15 | 只看该作者
/**
******************************************************************************
** \brief  UART通道通信状态清除
**
** \param [in] UARTx通道号,enStatus清除哪个状态
**
** \retval OK
** \retval ErrorInvalidParameter清除失败
******************************************************************************/
en_result_t Uart_ClrStatus(M0P_UART_TypeDef* UARTx,en_uart_status_t enStatus)
{
    ASSERT(IS_VALID_STATUS(enStatus));

    SetBit((uint32_t)(&(UARTx->ICR)), enStatus, FALSE);
   
    return Ok;
}

使用特权

评论回复
16
gaoke231|  楼主 | 2021-1-14 13:50 | 只看该作者
/**
******************************************************************************
** \brief  UART通道发送数据函数,查询方式调用此函数,中断方式发送不适用
**
** \param [in] UARTx通道号,Data发送数据
**
** \retval Ok发送成功
** \retval ErrorInvalidParameter发送失败
******************************************************************************/
en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data)
{
    while(FALSE == Uart_GetStatus(UARTx,UartTxe))
    {}
    UARTx->SBUF_f.DATA = u8Data;
    while(FALSE == Uart_GetStatus(UARTx,UartTC))
    {}
    Uart_ClrStatus(UARTx,UartTC);      
    return Ok;
}

使用特权

评论回复
17
gaoke231|  楼主 | 2021-1-14 13:52 | 只看该作者
/**
******************************************************************************
** \brief  UART通道发送数据函数,中断方式调用此函数
**
** \param [in] UARTx通道号,Data发送数据
**
** \retval Ok发送成功
** \retval ErrorInvalidParameter发送失败
******************************************************************************/
en_result_t Uart_SendDataIt(M0P_UART_TypeDef* UARTx, uint8_t u8Data)
{
    UARTx->SBUF_f.DATA = u8Data;
   
    return Ok;
}

使用特权

评论回复
18
gaoke231|  楼主 | 2021-1-14 13:53 | 只看该作者
/**
******************************************************************************
** \brief  UART通道接收数据函数
**
** \param [in] UARTx通道号
**
** \retval 接收数据
******************************************************************************/
uint8_t Uart_ReceiveData(M0P_UART_TypeDef* UARTx)
{
    return (UARTx->SBUF_f.DATA);
}

使用特权

评论回复
19
gaoke231|  楼主 | 2021-1-14 13:55 | 只看该作者
/**
******************************************************************************
** \brief  UART通道初始化函数
**
** \param [in] UARTx通道号,pstcCfg初始化结构体 @ref stc_uart_cfg_t
**
** \retval OK配置成功
** \retval ErrorInvalidParameter配置失败
******************************************************************************/
en_result_t Uart_Init(M0P_UART_TypeDef* UARTx, stc_uart_cfg_t* pstcCfg)
{
    en_result_t enRet = Error;
    uint32_t u32Over[2] = {0x4, 0x3};
    uint16_t u16OverShift;
    float32_t f32Scnt=0;
   
    if(NULL == pstcCfg)
    {
        return ErrorInvalidParameter;
    }
   
    UARTx->SCON = 0;
   
    UARTx->SCON = (uint32_t)pstcCfg->enStopBit |
                  (uint32_t)pstcCfg->enMmdorCk |
                  (uint32_t)pstcCfg->stcBaud.enClkDiv |
                  (uint32_t)pstcCfg->enRunMode;
   
    if((UartMskMode1 == pstcCfg->enRunMode) || (UartMskMode3 == pstcCfg->enRunMode))
    {
        u16OverShift = u32Over[pstcCfg->stcBaud.enClkDiv/UartMsk8Or16Div];
        f32Scnt = (float32_t)(pstcCfg->stcBaud.u32Pclk)/(float32_t)(pstcCfg->stcBaud.u32Baud<<u16OverShift);        
        UARTx->SCNT = (uint16_t)(float32_t)(f32Scnt + 0.5f);
        Uart_EnableFunc(UARTx,UartRenFunc);       ///<使能收发
    }
   
   

    enRet = Ok;
    return enRet;
}

使用特权

评论回复
20
zhamatu| | 2021-1-14 16:14 | 只看该作者
支持一下,居然还有生成随机数的函数,这个太方便了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝