分享华大CORTEX M0+ 低功耗ARM机串口主机数据发送示例程序
[复制链接]
需要完整文件的请加QQ咨询:3386208645
/*********************************************/
/**本样例主要涉及串口主从机数据收发功能 ******/
/* 说明: **********/
/* 配置P35、P36为UART收发端口 **********/
/* 配置波特率38400bps **********/
/* 配置BaseTime1自动重载周期 **********/
/* 使能UART收发功能 **********/
/********************************************/
#include "uart.h"
#include "bt.h"
#include "gpio.h"
#define T1_PORT (3)
#define T1_PIN (3)
uint8_t u8TxData[10] = {0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};
uint32_t u32RxData[10];
uint8_t u8TxCnt=0,u8RxCnt=0;
void SysTick_Handler(void)
{
static uint8_t u8val = 0;
Gpio_SetIO(T1_PORT, T1_PIN, u8val);
u8val = !u8val;
}
void TxIntCallback(void)
{
Uart_SendData(UARTCH1, u8TxData[u8TxCnt]);
u8TxCnt++;
if(u8TxCnt>10)
u8TxCnt=0;
}
void RxIntCallback(void)
{
u32RxData[u8RxCnt++]=Uart_ReceiveData(UARTCH1);
if(u8RxCnt>9)
u8RxCnt=0;
}
void ErrIntCallback(void)
{
}
int32_t main(void)
{
uint16_t timer,i=0;
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;
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);
stcCfg.enClkSrc = ClkXTH;
stcCfg.enHClkDiv = ClkDiv1;
stcCfg.enPClkDiv = ClkDiv1;
Clk_Init(&stcCfg);
Gpio_InitIOExt(3,5,GpioDirOut,TRUE,FALSE,FALSE,FALSE);
Gpio_InitIOExt(3,6,GpioDirOut,TRUE,FALSE,FALSE,FALSE);
Gpio_SetIO(3,5,1);
Gpio_SetIO(3,6,1);
Gpio_SetFunc_UART1TX_P35();
Gpio_SetFunc_UART1RX_P36();
Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);
Clk_SetPeripheralGate(ClkPeripheralUart1,TRUE);
stcUartIrqCb.pfnRxIrqCb = RxIntCallback;
stcUartIrqCb.pfnTxIrqCb = TxIntCallback;
stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;
stcConfig.pstcIrqCb = &stcUartIrqCb;
stcConfig.bTouchNvic = TRUE;
stcConfig.enRunMode = UartMode3;
stcMulti.enMulti_mode = UartMulti;
enTb8 = AddrOrOdd;
Uart_SetMMDOrCk(UARTCH1,enTb8);
stcConfig.pstcMultiMode = &stcMulti;
stcBaud.u8Dbaud = 0u;
stcBaud.u32Baud = 38400u;
stcBaud.u8Mode = UartMode3;
pclk = Clk_GetPClkFreq();
timer=Uart_SetBaudRate(UARTCH1,pclk,&stcBaud);
stcBtConfig.enMD = BtMode2;
stcBtConfig.enCT = BtTimer;
Bt_Init(TIM1, &stcBtConfig);
Bt_ARRSet(TIM1,timer);
Bt_Cnt16Set(TIM1,timer);
Bt_Run(TIM1);
Uart_Init(UARTCH1, &stcConfig);
Uart_ClrStatus(UARTCH1,UartTxEmpty);
Uart_EnableFunc(UARTCH1,UartRx);
Uart_SendData(UARTCH1,0xC0);
while(0 == Uart_GetStatus(UARTCH1,UartTxEmpty));
enTb8 = DataOrEven;
Uart_SetMMDOrCk(UARTCH1,enTb8);
Uart_ClrStatus(UARTCH1,UartTxEmpty);
while(i<10)
{
Uart_SendData(UARTCH1,u8TxData);
while(0 == Uart_GetStatus(UARTCH1,UartTxEmpty));
Uart_ClrStatus(UARTCH1,UartTxEmpty);
i++;
}
while(1);
}
/******************************************************************************
* EOF (not truncated)
******************************************************************************/
此内容由EEWORLD论坛网友deepskin1213原创,如需转载或用于商业用途需征得作者同意并注明出处
|