博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CC2541之串口调试PM2.5传感器
阅读量:4573 次
发布时间:2019-06-08

本文共 2727 字,大约阅读时间需要 9 分钟。

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   else11   {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. 完成,可以正常的收发数据。

 

转载于:https://www.cnblogs.com/429512065qhq/p/8284394.html

你可能感兴趣的文章
实验四
查看>>
继承和组合(转)
查看>>
mssql sqlserver 取消数值四舍五入的方法分享
查看>>
[记录] JavaScript 中的事件分类
查看>>
《java JDK7 学习笔记》之接口与多态
查看>>
【NOI2008】志愿者招募
查看>>
LeetCode 96:Unique Binary Search Trees
查看>>
kernel-char设备的建立
查看>>
DVWA-CSRF
查看>>
letecode [404] - Sum of Left Leaves
查看>>
ubuntu common software introduction
查看>>
资源相互引用时 需添加 PerformSubstitution=True
查看>>
MapRedece(单表关联)
查看>>
蒲公英App开发之检测新版本
查看>>
Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
查看>>
棋牌分布式架构
查看>>
【安卓基础】倒计时按钮封装(验证码倒计时按钮)
查看>>
configparser模块
查看>>
Crack的必备工具(2)
查看>>
SelectQueryBuilder的用法
查看>>