嗨,LC, 现在它可以通过uart rx引脚从延长睡眠模式中唤醒。但有时在系统唤醒后,它会进入“HW\ U UART\ U INT\ U BUSY\ U DETECTED”中断。虽然我可以使用“hw\u uart\u transmit\u fifo\u empty(uart)”退出“hw\u uart\u INT\u BUSY\u DETECTED”中断,但我发现波特率不正确,导致错误的字符传输。如何解决这个问题?
硬件gpio\设置\引脚\功能(硬件gpio\端口\ 4、硬件gpio\引脚\ 7、硬件gpio\模式\输入\上拉、硬件gpio\功能\ gpio); hw\u wkup\u set\u pin\u state(hw\u GPIO\u PORT\u 4,hw\u GPIO\u pin\u 7,true)//将rx引脚配置为唤醒引脚 hw\ U wkup\ U set\ U pin\ U触发器(hw\ U GPIO\ U PORT\ U 4、hw\ U GPIO\ U pin\ U 7、hw\ U wkup\ U pin\ U STATE\ U LOW); hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
硬件\ gpio \设置\引脚\功能(UART \ U RX \ U端口、UART \ U RX \ U引脚、硬件\ gpio \ U模式\ U输入, HW_GPIO_FUNC_GPIO);//RX引脚禁用 uart\ U rx\ U int\ U enable(HW\ U UART1,false); uart_clock_disable(); }
你好,古翔,
UART硬件在延长睡眠模式下关闭,因此无法使用它唤醒系统。
然而,有一个解决办法,你必须非常小心,这不是一个正式推荐的。
您可以在进入睡眠前将UART引脚映射到GPIO以进行外部唤醒,并将其用作唤醒的触发器,然后在唤醒后将该引脚映射回UART以通过UART接收数据。
但是,您必须非常小心地管理以下内容:波特率、去抖动和唤醒延迟。
最好的,
信用证
嗨,LC
你能给我一个演示代码来学习吗?
你好,古翔,
此方法用于下面提到的无代码项目。以user\u prepare\u sleep()函数为起点。
https://support.dialog-semiconductor.com/connectivity/reference-design/smartbond-codeless-serial-link
最好的,
信用证
嗨,LC
档案显示对我来说是“受限的”。你能允许我下载吗?
我的电子邮件:414095539@qq.com
你好,古翔,
这是由于在下载文件之前需要接受许可协议。请接受许可,您应该能够在这个支持门户上下载文件。
最好的,
信用证
嗨,LC
我已经接受了许可协议并提交了,但是它没有回复我,我仍然无法访问下载文件。
你好,古翔,
你能在你的个人资料中提供一个有效的地址和其他细节吗。我们需要一些有效的信息来访问门户上的内容。
最好的,
信用证
嗨,LC,
我更新了我的个人资料。请再检查一遍。
古翔你好,
你现在应该可以下载内容了。
最好的,
信用证
嗨,LC,
现在它可以通过uart rx引脚从延长睡眠模式中唤醒。但有时在系统唤醒后,它会进入“HW\ U UART\ U INT\ U BUSY\ U DETECTED”中断。虽然我可以使用“hw\u uart\u transmit\u fifo\u empty(uart)”退出“hw\u uart\u INT\u BUSY\u DETECTED”中断,但我发现波特率不正确,导致错误的字符传输。如何解决这个问题?
你好,古翔,
因此,首先,在进入休眠模式之前,您将UART Rx引脚配置为GPIO,并在该引脚上启用唤醒中断,其中1个事件计数。为了唤醒系统,你需要发送一个@字符,这个字符可以将引脚拉低足够的时钟周期。
在你醒来之后,你就可以启动UART了。如果您的实现正在执行此操作,您仍然可以看到HW\u UART\u INT\u BUSY\u DETECTED中断。请确认。
最好的,
信用证
嗨,LC
是的,我可以将UART Rx引脚配置为GPIO唤醒引脚,并可以唤醒系统。现在它在大多数情况下运行良好。但我没有只发送一个@字符。因为有时只有一个@字符是不够的时钟周期醒来。但当我发送一个长字符串(超过20字节@字符,波特率38400)唤醒系统时,更容易发生“HW\u UART\u INT\u BUSY\u DETECTED”中断,似乎波特率是错误的。
配置代码如下:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void console\u uart\u leave\u from\u sleepmode(void)
{
hw\u wkup\u set\u pin\u state(UART\u RX\u PORT,UART\u RX\u pin,false);
hw\u gpio\u set\u pin\u功能(UART\u RX\u端口、UART\u RX\u pin、hw\u gpio\u MODE\u INPUT\u PULLUP,
HW_GPIO_FUNC_UART_RX);// RX引脚enable
控制台\u uart \u init();
uart\u rx\u int\u enable(硬件UART1,真);
}
void console\u uart\u prepare\u for\u sleepmode(void)
{
hw_wkup_init(空);
hw_wkup_reset_counter();
hw\u wkup\u set\u debounce\u time(0);
hw_wkup_set_counter_threshold (1);
硬件gpio\设置\引脚\功能(硬件gpio\端口\ 4、硬件gpio\引脚\ 7、硬件gpio\模式\输入\上拉、硬件gpio\功能\ gpio);
hw\u wkup\u set\u pin\u state(hw\u GPIO\u PORT\u 4,hw\u GPIO\u pin\u 7,true)//将rx引脚配置为唤醒引脚
hw\ U wkup\ U set\ U pin\ U触发器(hw\ U GPIO\ U PORT\ U 4、hw\ U GPIO\ U pin\ U 7、hw\ U wkup\ U pin\ U STATE\ U LOW);
hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
硬件\ gpio \设置\引脚\功能(UART \ U RX \ U端口、UART \ U RX \ U引脚、硬件\ gpio \ U模式\ U输入,
HW_GPIO_FUNC_GPIO);//RX引脚禁用
uart\ U rx\ U int\ U enable(HW\ U UART1,false);
uart_clock_disable();
}