☆ 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
版權聲明:本文為部落客原創文章,轉載請附上博文連結!
樣例使用說明
#include “ddl.h”
#include “uart.h”
#include “bt.h”
#include “lpm.h”
#include “gpio.h”
//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);
}