☆ 华大HC32F003☆ ---UART例程分享(不断更新中......)

☆ HC32F003 系列是一款 Low Pin Count、宽电压工作范围的 MCU。集成 12 位 1M sps 高精度SARADC 以及集成了比较器,多路 UART,SPI,I2C 等丰富的通讯外设,具有高整合度、高抗干扰、高可靠性的特点。HC32F003 内核采用 Cortex-M0+ 内核,配合成熟的 Keil μVision 调试开发软件,支持 C 语言及汇编语言,汇编指令。

☆适用领域:小家电,充电器,重合闸,遥控器,电子烟,燃气报警器,数显表,温控器,记录仪等行业。☆ 本文旨在抛砖引玉,其余具体使用欢迎加Q:3254478211或加群164973950相互交流、学习。

☆ 华大MCU单片机资料分享连接
HC32F003 HC32F005 HC32L110 HC32L136 HC32F030 HC32M140 HC32F146 HC32L150 HC32L156

作者:虹芯侠客1
来源:CSDN
原文:https://blog.csdn.net/jetson024/article/details/84619088
版权声明:本文为博主原创文章,转载请附上博文链接!

                                样例使用说明

/****************************************************************************/
/
\file main.c
**
** A detailed description is available at
** @link Sample Group Some description @endlink
**
** - 2017-05-17 1.0 cj First version for Device Driver Library of Module.
**
******************************************************************************/

/******************************************************************************

  • Include files
    ******************************************************************************/
    #include “ddl.h”
    #include “uart.h”
    #include “bt.h”
    #include “lpm.h”
    #include “gpio.h”

/******************************************************************************

  • Local pre-processor symbols/macros (’#define’)
    ******************************************************************************/

/******************************************************************************

  • Global variable definitions (declared in header file with ‘extern’)
    ******************************************************************************/

/******************************************************************************

  • Local type definitions (‘typedef’)
    ******************************************************************************/

/******************************************************************************

  • Local function prototypes (‘static’)
    ******************************************************************************/

/******************************************************************************

  • Local variable definitions (‘static’) *
    ******************************************************************************/

/******************************************************************************

  • Local pre-processor symbols/macros (’#define’)
    */
    #define T1_PORT (3)
    #define T1_PIN (3)
    /
  • Function implementation - global (‘extern’) and local (‘static’)
    ****************************************************************************/
    /

** \brief Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
//uint8_t u8TxData[10] = {0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};//“HUADA MCU!”;
uint8_t u8TxData[10] = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};
uint32_t u32RxData[10];
uint8_t u8TxCnt=0,u8RxCnt=0;

void TxIntCallback(void)
{

if(u8TxCnt<10)
{
    M0P_UART1->SBUF = u32RxData[u8TxCnt];
    u8TxCnt++;
}
else //if(u8TxCnt>10)
{
    u8TxCnt = 0;
    Uart_ClrStatus(UARTCH1,UartTxEmpty);   
    Uart_DisableIrq(UARTCH1,UartTxIrq);
    Uart_EnableIrq(UARTCH1,UartRxIrq);
}

}
void RxIntCallback(void)
{
u32RxData[u8RxCnt]=Uart_ReceiveData(UARTCH1);
u8RxCnt++;
if(u8RxCnt>=10)
{
Uart_DisableIrq(UARTCH1,UartRxIrq);
Uart_EnableIrq(UARTCH1,UartTxIrq);
u8RxCnt = 0;
M0P_UART1->SBUF = u32RxData[0];
u8TxCnt = 1;
}

}
void ErrIntCallback(void)
{

}
int32_t main(void)
{
uint16_t timer;
uint32_t pclk;
stc_clk_config_t stcCfg;
stc_uart_config_t stcConfig;
stc_uart_irq_cb_t stcUartIrqCb;
stc_uart_multimode_t stcMulti;
stc_uart_baud_config_t stcBaud;
stc_bt_config_t stcBtConfig;
stc_lpm_config_t stcLpmCfg;

en_uart_mmdorck_t enTb8;

DDL_ZERO_STRUCT(stcConfig);
DDL_ZERO_STRUCT(stcUartIrqCb);
DDL_ZERO_STRUCT(stcMulti);
DDL_ZERO_STRUCT(stcBaud);
DDL_ZERO_STRUCT(stcBtConfig);
DDL_ZERO_STRUCT(stcLpmCfg);

stcLpmCfg.enSLEEPDEEP = SlpDpDisable;

//时钟部分配置
stcCfg.enClkSrc = ClkXTH;
stcCfg.enHClkDiv = ClkDiv1;
stcCfg.enPClkDiv = ClkDiv1;
Clk_Init(&stcCfg);

Gpio_InitIO(T1_PORT,T1_PIN,GpioDirIn); 
Gpio_InitIO(0,3,GpioDirOut);
Gpio_SetIO(0,3,1);

Gpio_InitIOExt(3,5,GpioDirOut,TRUE,FALSE,FALSE,FALSE);   
Gpio_InitIOExt(3,6,GpioDirOut,TRUE,FALSE,FALSE,FALSE); 

//通道端口配置
Gpio_SetFunc_UART1TX_P35();
Gpio_SetFunc_UART1RX_P36();

//外设时钟使能
Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);//模式0/2可以不使能
Clk_SetPeripheralGate(ClkPeripheralUart1,TRUE);



stcUartIrqCb.pfnRxIrqCb = RxIntCallback;
stcUartIrqCb.pfnTxIrqCb = TxIntCallback;
stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;
stcConfig.pstcIrqCb = &stcUartIrqCb;
stcConfig.bTouchNvic = TRUE;


stcConfig.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试


stcMulti.enMulti_mode = UartNormal;//测试项,更改此处来转换多主机模式,mode2/3才有多主机模式
enTb8 = DataOrEven;
Uart_SetMMDOrCk(UARTCH1,enTb8);
stcConfig.pstcMultiMode = &stcMulti;

#if 1
stcBaud.bDbaud = 0u;//双倍波特率功能
stcBaud.u32Baud = 2400u;//更新波特率位置
stcBaud.u8Mode = UartMode1; //计算波特率需要模式参数
pclk = Clk_GetPClkFreq();
timer=Uart_SetBaudRate(UARTCH1,pclk,&stcBaud);

stcBtConfig.enMD = BtMode2;
stcBtConfig.enCT = BtTimer;
Bt_Init(TIM1, &stcBtConfig);//调用basetimer1设置函数产生波特率
Bt_ARRSet(TIM1,timer);
Bt_Cnt16Set(TIM1,timer);
Bt_Run(TIM1);

#endif
Uart_Init(UARTCH1, &stcConfig);
Uart_EnableIrq(UARTCH1,UartRxIrq);
Uart_ClrStatus(UARTCH1,UartRxFull);
Uart_EnableFunc(UARTCH1,UartRx);
#if 0 //休眠模式测试
while(1 == Gpio_GetIO(T1_PORT,T1_PIN));//注意:如果用户修改进入深度休眠的话,此处不能屏蔽
Lpm_Config(&stcLpmCfg);
Lpm_GotoLpmMode();
Gpio_SetIO(0,3,0);
#endif
while(1);
}

/******************************************************************************

  • EOF (not truncated)
    ******************************************************************************/

你可能感兴趣的:(华大MCU,华大单片机,华大低功耗MCU)