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。

 #define NPI_UART_BR                    HAL_UART_BR_9600

4. 修改串口的引脚

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

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

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

6. 修改中断函数halUart0TxIsr

 HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
{
HAL_ENTER_ISR(); if (dmaCfg.txHead == dmaCfg.txTail)
{
IEN2 &= ~UTXxIE;
dmaCfg.txMT = ;
}
else
{
UTXxIF = ;
UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++]; if ((HAL_UART_DMA_TX_MAX != ) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX))
{
dmaCfg.txHead = ;
}
} HAL_EXIT_ISR();
}

7. 看下IEN1的寄存器

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

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

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

9. 串口接收回调函数

 uint8 buffer[] = {};
static void NpiSerialCallback(uint8 port, uint8 events)
{
(void) port;
if(events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL)) //
{
uint8 num_bytes = ;
num_bytes = NPI_RxBufLen(); //读取串口缓冲区有多少个字节
NPI_ReadTransport(buffer, num_bytes);
}

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

CC2541之串口调试PM2.5传感器的更多相关文章

  1. Modbus通讯协议学习 - 串口调试

    概述 我们在做任何事情之前都需要获取很多 调试步骤: 1:485转换器连接硬件 2:485转换器上的USB接口连接电脑. 3:打开设备管理器 ->查看端口 4:打开串口调试工具,在串口配置的地方 ...

  2. android模拟器使用PC串口调试

    android模拟器使用PC串口调试1.模拟器可以使用PC的串口  启动模拟器并加载PC串口 命令如下:  运行 emulator @模拟器名称 -qemu -serial COM12.查看串口是否被 ...

  3. android 串口调试

    在usb调试过程中,都会选择串口查看log,更希望在串口中输入命令查看相关状态.但是一般情况下串口调试时 进程用户是shell,即使你在adb shell下是root用户. 暴力方法是在 adroid ...

  4. GeekPwn2015胸卡ESP8266 12E串口调试

    相信今年参加GeekPwn活动的很多同学都获得了一枚GeekPwn的胸牌,为方便大家对胸牌进行一些调试和破解,这里分享一些关于这枚胸牌的一些信息 :)如发现文章之中有错误之处,欢迎大家斧正! 0×00 ...

  5. keil中的串口调试:

    keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如 ...

  6. 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!

    自己编写的基于VC++6.0的串口调试软件源程序! 程序下载链接: 点击打开链接

  7. 基于Modbus的C#串口调试开发

    说明:本文主要研究的是使用C# WinForm开发的串口调试软件(其中包含Modbus协议相关操作).Modbus相关协议可以查阅百度文库等,可参考: <http://wenku.baidu.c ...

  8. 【安富莱专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用

    说明:1.串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口.现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式.2 ...

  9. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

随机推荐

  1. 深入理解Java虚拟机02--Java内存区域与内存溢出异常

    一.概述 我们在进行 Java 开发的时候,很少关心 Java 的内存分配等等,因为这些活都让 JVM 给我们做了.不仅自动给我们分配内存,还有自动的回收无需再占用的内存空间,以腾出内存供其他人使用. ...

  2. SpringBoot集成Swagger接口管理工具

    手写Api文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时. 接口返回结果不明确 不能直接在线测试接口,通常需要使用工具,比如postman 接口文档太多,不好管 ...

  3. vue自定义一个v-model

    目标 js <template> <my-form v-model="form"> </my-form> </template> & ...

  4. 使用Visual Studio Team Services持续集成(二)——为构建定义属性

    使用Visual Studio Team Services持续集成(二)--为构建定义属性 1.从VSTS帐户进入到Build 2.编辑构建定义并单击Options Description:如果这里明 ...

  5. MHA快速搭建

    很早之前写过MHA的文章,但是常常在技术群看到有同学问MHA搭建的问题,不是权限问题就是配置问题,我在这里就再次一写下配置过程以及快速的搭建.如果想知道更多的细节与原理,请参考:MySQL高可用架构之 ...

  6. selenium-获取一组数组进行操作(七)

    selenium-获取一组数组进行操作 以  纵横中文网  中获取24小时畅销榜的书单为例 此文仅做 selenium 在自动化测试中怎么获取一组数据进行说明,不做网络爬虫解释 当然,使用爬虫得到本文 ...

  7. Android 5.0 版本 USB 调试模式打开方法

    Android 4.2 版本 USB 调试模式打开方法 1. 进入“设置”页面,点击“关于平板电脑”.见下图红色方框.   2. 疯狂点击“版本号”,见下图红色方框,直到出现“您现在处于开发者模式!” ...

  8. mysql Client does not support authentication protocol requested by server; consider upgrading MySQL

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

  9. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象

    JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义      查找以八进制数 规定的字符.     查找以十六进制数 规定 ...

  10. mysql数据库显示 1164 table *** doesn't exist

    问题出现场景: 以前mysql安装在C盘,后来重装系统,将mysql安装在了D盘,重装之前,将mysql的Data 文件夹备份了下来,mysql重新安装好之后,将原来的Data 文件夹内的数据库文件夹 ...