zoukankan      html  css  js  c++  java
  • CC2541之串口调试PM2.5传感器

    1. CC2541通过串口和PM25设备PMS7003通信,串口9600波特率,手机APP显示数据一直是128,先检查蓝牙数据通路问题,数据通路没问题

    2. 看下串口是否OK,串口也不通,看到宏定义ZAPP_P2,不清楚是什么用途,本次使用P0_4,P0_5,串口UART1的ALT1。使用宏定义ZAPP_P2和uart_alt1,去掉宏定义CC2540_MINIDK,增加HAL_UART=TRUE,关闭流控#define NPI_UART_FC        FALSE,关闭功耗控制xPOWER_SAVING

    3. 修改串口波特率9600。

    1 #define NPI_UART_BR                    HAL_UART_BR_9600

    4. 修改串口的引脚

    1 #define PxSEL                      P0SEL        //串口配置到P0口
    2 #define HAL_UART_PERCFG_BIT        0x00         // USART1 on P0, Alt-1; so clear this bit,使用ALT1,所以清零
    3 #define HAL_UART_PRIPO             0x40         // USART0 priority over UART1.串口优先级
    4 #define HAL_UART_Px_CTS            0x04         // Peripheral I/O Select for CTS flow control. 串口流控引脚
    5 #define HAL_UART_Px_RTS            0x08        // Peripheral I/O Select for RTS must be manual. 串口流控引脚
    6 #define HAL_UART_Px_SEL            0x30         // Peripheral I/O Select for Rx/Tx. 串口的RXD和TXD引脚,P0_4和P0_5

    5. 修改串口的中断配置,疑问是为啥是用P0中断,而不是UART1的RXD中断?

     1 #define PxDIR                      P0DIR     //串口在P0
     2 #define PxIEN                      P0IEN     //P0中断使能
     3 #define PxIFG                      P0IFG     //P0中断使能
     4 #define PxIF                       P0IF
     5 #define DMA_RDYIn                  P0_2      //CTS流控引脚
     6 #define DMA_RDYOut                 P0_3      //RTS流控引脚
     7 #define DMA_RDYIn_BIT              BV(2)     // Same as the I/O Select for CTS flow control.//CTS流控引脚
     8 #define DMA_RDYOut_BIT             BV(3)     // Same as the I/O Select for manual RTS flow ctrl.//RTS流控引脚
     9 // Falling edge ISR on P1.4-7 pins.
    10 #define PICTL_BIT                  BV(0)     // 中断边沿检测
    11 #define IENx                       IEN1      //中断使能寄存器,这里的疑问就是为啥使能的是P0的中断,不是UART1的RXD中断
    12 #define IEN_BIT                    BV(5)     //中断使能寄存器第5位P0IE

    6. 修改中断函数halUart0TxIsr

     1 HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
     2 {
     3   HAL_ENTER_ISR();
     4 
     5   if (dmaCfg.txHead == dmaCfg.txTail)
     6   {
     7     IEN2 &= ~UTXxIE;
     8     dmaCfg.txMT = 1;
     9   }
    10   else
    11   {
    12     UTXxIF = 0;
    13     UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++];
    14 
    15     if ((HAL_UART_DMA_TX_MAX != 256) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX))
    16     {
    17       dmaCfg.txHead = 0;
    18     }
    19   }
    20 
    21   HAL_EXIT_ISR();
    22 }

    7. 看下IEN1的寄存器

    1 SFRBIT( IEN1    ,  0xB8, _IEN17, _IEN16, P0IE, T4IE, T3IE, T2IE, T1IE, DMAIE )

    8. 串口初始化函数和发送

    1   NPI_InitTransport(NpiSerialCallback);
    2   uart1Send("1h1h0",5);

    9. 串口接收回调函数

     1 uint8 buffer[32] = {0};
     2 static void NpiSerialCallback(uint8 port, uint8 events)
     3 {
     4   (void) port;
     5   if(events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL)) //
     6   {
     7     uint8 num_bytes = 0;
     8     num_bytes = NPI_RxBufLen(); //读取串口缓冲区有多少个字节
     9     NPI_ReadTransport(buffer, num_bytes);
    10   }

    10. 完成,可以正常的收发数据。

  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/8284394.html
Copyright © 2011-2022 走看看