你(们)好
我正在执行 基于 SimpleBLEPeripheral 的项目。
我对该项目的更改只是对特性的少量调整。
从这个角度来看、一切都正常。
我使用 Timer1通道1来使用比较模式创建信号:"清除比较上的输出、设置为0"。
我设置所有寄存器、一切都好。 我使用示波器进行了检查、信号完全符合我的要求。
此消息的末尾介绍了我的设置。
我在函数中执行这些设置:
SimpleBLEPeripheral_Init
奇怪的问题如下。 如果在打开 Timer1并执行所有设置后、我进入一个不执行任何操作的无限循环(实际上阻断了 CPU)、则信号是完美的。
另一方面、如果我让 BLE 堆栈继续工作并执行它的操作、我会在示波器中看到 Timer1生成的信号变得不稳定、或者我可能会说不准确。
脉冲的长度会有所不同。
它就像 BLE 堆栈中的东西干扰 Timer1的运行。 如果我使用调试器中断程序的流程、则输出再次良好。
当然、我禁用 了 power_saving 宏、因此处理器不会进入任何睡眠模式。
以下是我的设置
PERCFG = 0x00;//所有位置都在备选1位置
APCFG = 0x00;//所有模拟禁用
P0SEL = 0x0C;//将端口0配置为 GPIO、引脚2、3是 Timer1的通道0和1
P0DIR = 0xFC;//端口0引脚 P0.0和 P0.1作为输入(按钮)、所有其他引脚(P0.2-P0.7)作为输出
P1SEL = 0;//将端口1配置为 GPIO
P1DIR = 0xFF;//所有端口1引脚(P1.0-P1.7)作为输出
P2SEL = 0x00;//将端口2配置为 GPIO,端口1的优先级无关紧要
P2DIR = 0x9F;//所有端口2引脚(P2.0-P2.4)作为输出、Port0优先级为:定时器1通道0–1
T1CTL =(T1CTL 和~(T1CTL_MODE | T1CTL_DIV))| T1CTL_MODE_MODUMO | T1CTL_DIV_32;
T1CCTL0 = T1CCTL1 = 0x24;//比较时清除输出,设置为0
//1MHz 时钟抖动20000倍(0x4e20)可得到50Hz
T1CC0L = 0x20;
T1CC0H = 0x4E;
//0x5DC = 1.5ms 脉冲
T1CC1L = 0xDC;
T1CC1H = 0x05;