| GenericApp 實(shí)驗(yàn) Zigbee協(xié)議棧(2530開發(fā)板)串口通信默認(rèn)采用的是DMA模式,假如我們想用串口中斷方式需要做哪些改動(dòng)呢? 請繼續(xù)往下閱讀吧。 首先,我們要修改兩個(gè)宏定義: 在hal_board_cfg.h頭文件中, //*********** 自己修改 *****//#define HAL_UART_DMA 1
 #define HAL_UART_DMA 0
 //**************************
 
 //********** 自己修改 *****//#define HAL_UART_ISR 0
 #define HAL_UART_ISR 1
 //*************************
 
 另外,我們還需要設(shè)置一下串口的波特率。 比如,我們要把波特率設(shè)置為 2400。 在hal_uart.h文件中,添加一個(gè)宏定義: //***** 自己添加 *************
 #define HAL_UART_BR_2400 0x05
 //*****************************  在mt_uart.h文件中, //#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_2400 //自己修改
 
 
 在_hal_uart_isr.c文件中,需要修改 HalUARTOpenISR(halUARTCfg_t *config) 函數(shù),如下面紅色部分所示: static void HalUARTOpenISR(halUARTCfg_t *config){
 isrCfg.uartCB = config->callBackFunc;
 // Only supporting subset of baudrate for code size - other is possible.
 HAL_UART_ASSERT( (config->baudRate == HAL_UART_BR_2400)|| /* 自己添加 */
 (config->baudRate == HAL_UART_BR_9600) ||
 (config->baudRate == HAL_UART_BR_19200) ||
 (config->baudRate == HAL_UART_BR_38400) ||
 (config->baudRate == HAL_UART_BR_57600) ||
 (config->baudRate == HAL_UART_BR_115200));
 
 if (config->baudRate == HAL_UART_BR_57600 ||
 config->baudRate == HAL_UART_BR_115200)
 {
 UxBAUD = 216;
 }
 else
 {
 UxBAUD = 59;
 }
 
 switch (config->baudRate)
 {
 //**** 自己添加 ************
 case HAL_UART_BR_2400:
 UxGCR = 6;
 break;
 //***************************
 
 case HAL_UART_BR_9600:
 UxGCR = 8;
 break;
 case HAL_UART_BR_19200:
 UxGCR = 9;
 break;
 case HAL_UART_BR_38400:
 case HAL_UART_BR_57600:
 UxGCR = 10;
 break;
 default:
 UxGCR = 11;
 break;
 }
 // 8 bits/char; no parity; 1 stop bit; stop bit hi.if (config->flowControl)
 {
 UxUCR = UCR_FLOW | UCR_STOP;
 PxSEL |= HAL_UART_Px_RTS | HAL_UART_Px_CTS;
 }
 else
 {
 UxUCR = UCR_STOP;
 }
 UxCSR |= CSR_RE;URXxIE = 1;
 UxDBUF = 0; // Prime the ISR pump.
 }
 好啦,到這里,我們已經(jīng)把Zigbee協(xié)議棧的串口通信方式改為了中斷方式,并且把波特率改成了2400。 還有啊,中斷方式的一些函數(shù)在 _hal_uart_isr.c文件中。串口接收中斷的服務(wù)程序是  #if (HAL_UART_ISR == 1)HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )
 #else
 HAL_ISR_FUNCTION( halUart1RxIsr, URX1_VECTOR )
 #endif
 
 你可以在這里處理接收到的數(shù)據(jù)。 |