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。
#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传感器的更多相关文章
- Modbus通讯协议学习 - 串口调试
		概述 我们在做任何事情之前都需要获取很多 调试步骤: 1:485转换器连接硬件 2:485转换器上的USB接口连接电脑. 3:打开设备管理器 ->查看端口 4:打开串口调试工具,在串口配置的地方 ... 
- android模拟器使用PC串口调试
		android模拟器使用PC串口调试1.模拟器可以使用PC的串口 启动模拟器并加载PC串口 命令如下: 运行 emulator @模拟器名称 -qemu -serial COM12.查看串口是否被 ... 
- android 串口调试
		在usb调试过程中,都会选择串口查看log,更希望在串口中输入命令查看相关状态.但是一般情况下串口调试时 进程用户是shell,即使你在adb shell下是root用户. 暴力方法是在 adroid ... 
- GeekPwn2015胸卡ESP8266 12E串口调试
		相信今年参加GeekPwn活动的很多同学都获得了一枚GeekPwn的胸牌,为方便大家对胸牌进行一些调试和破解,这里分享一些关于这枚胸牌的一些信息 :)如发现文章之中有错误之处,欢迎大家斧正! 0×00 ... 
- keil中的串口调试:
		keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如 ... 
- 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!
		自己编写的基于VC++6.0的串口调试软件源程序! 程序下载链接: 点击打开链接 
- 基于Modbus的C#串口调试开发
		说明:本文主要研究的是使用C# WinForm开发的串口调试软件(其中包含Modbus协议相关操作).Modbus相关协议可以查阅百度文库等,可参考: <http://wenku.baidu.c ... 
- 【安富莱专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用
		说明:1.串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口.现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式.2 ... 
- 串口调试助手vc源程序及其详细编写过程
		串口调试助手vc源程序及其详细编写过程 目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ... 
随机推荐
- 入手FUJIFILM X100S
			有个朋友买了,用了说很好,于是在秋叶原的yodobashi体验了好几个星期天之后,终于下定决心出手了,购入了黑色限量版,还能用优惠券减免了200美元,最后全套1200美元.黑色限量版还包括了转接环,那 ... 
- onmouseover和onmouseenter区别
			onmouseover和onmouseenter都是鼠标进入时触发,onmouseover在所选元素的子元素间切换的时候也触发! <!doctype html><html lang= ... 
- 移动Web前端,游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏
			我们都知道,移动Web端(M站环境下),很多时候,前端是无法判断用户的登录状态的,因为出于安全性考虑,与账号相关的cookie字段一般都是 http-only的. 如果前端想判断用户的登录状态,需要主 ... 
- oracle大数据量更新引发的死锁问题解决方法及oracle分区和存储过程的思考
			前言 前几天上午在对数据库的一张表进行操作的时候,由于这张表是按照时间的一张统计表,正好到那天没有测试数据了,于是我想将表中所有的时间,统一更新到后一个月,于是对80w条数据的更新开始了.整个过程曲折 ... 
- web前端(5)—— 常用标签2
			以下三个不仅是常用标签了,还非常重要,所以请务必好好看,重要性从高到低: 盒模型div div标签是最常用最重要的,它可以把web页面分割成很多的小块分别管理 测试代码: <!DOCTYPE h ... 
- go语言打造个人博客系统(一)
			go语言打造个人博客系统(一) 为什么选择go语言? 听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为 ... 
- c/c++ vector,map,set,智能指针,综合运用的小例子
			标准库,智能指针,综合运用的小例子 功能说明:查询单词在文件中出现的次数,如果在同一行出现多次,只算一次. 比如查询单词:你好 输出的结果: 你好 出现了:2次 (行号 2)xxxxxxx 你好 (行 ... 
- c/c++ 标准顺序容器 容器的访问,删除 操作
			c/c++ 标准顺序容器 容器的访问,删除 操作 pop_front:vector,string不支持 pop_back:forward_list不支持 知识点 1,front, back, at 成 ... 
- Jenkins系统监测
			Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和 ... 
- 讲解wpe抓包,封包
			相信大多数朋友都是会使用WPE的,因为这里也有不少好的教程,大家都辛苦了!先说说接触WPE的情况.当时好像是2011年,我本来不知道WPE对游戏竟有如此大的辅助作用的.起先找WPE软件的时候,只是因为 ... 
