嗨,对话框当DA14681处于延长睡眠模式时,能否通过uart唤醒接收中断并接收来自收发器的数据字节?如何设置?
你好提到,
UART硬件在扩展睡眠模式下是关闭的,因此您不能使用它来唤醒系统。
然而,有一个变通方法,你必须非常小心,这不是一个官方推荐的方法。
您可以将UART引脚映射到GPIO,以便在入睡前进行外部唤醒,并使用它作为唤醒触发器,然后在唤醒后将引脚映射回UART,以通过UART接收数据。
但是,你必须非常小心管理以下的事情:波特率,脱扣和觉醒延迟。
最好的信用证
你好,信用证你能给我一个演示代码来学习吗?
此方法用于下面提到的无代码项目。以user_prepare_sleep()函数为起点。
https://support.dialog-semiconductor.com/connectivity/reference-design/smartbond-codeless-serial-link
你好,信用证文件显示我是“受限制的”。可以给我下载的权限吗?我的电子邮件:414095539 @qq.com
这是由于在下载文件之前需要接受许可协议。请接受许可,您应该能够在这个支持门户上下载文件。
你好,信用证我已经接受了许可协议并提交了,但是它没有回复我,我仍然无法访问下载文件。
你能在你的个人资料中提供一个有效的地址和其他细节吗?我们需要一些有效的信息来提供对门户上内容的访问。
你好,信用证,我更新了我的个人资料。请再检查一遍。
嗨提到,
您现在应该可以下载内容了。
你好,信用证,现在它可以通过uart rx引脚从延长睡眠模式中唤醒。但有时它会在系统唤醒后输入“HW_UART_INT_BUSY_DETECTED”中断。虽然我可以使用“hw_uart_transmit_fifo_empty(uart)”退出“HW_UART_INT_BUSY_DETECTED”中断,我发现波特率是不正确的,导致错误的字符传输。如何解决这个问题?
所以首先,你在进入睡眠模式之前将UART Rx引脚配置为GPIO,并且你在这个引脚上启用了唤醒中断,有1个事件计数。为了唤醒系统,你要发送一个@字符,它可以在足够的时钟周期内拉低引脚。
在您醒来之后,您将启用UART。您的实现这样做了吗?您仍然会看到HW_UART_INT_BUSY_DETECTED中断。请证实。
你好,信用证是的,我可以配置UART Rx引脚作为GPIO唤醒引脚,并可以唤醒系统。现在它在大多数情况下都很有效。但我并没有只发送一个@字符。因为有时一个@字符不足以唤醒时钟周期。但是,当我发送一个长字符串(超过20字节@字符,波特率38400)来唤醒系统时,更容易发生“HW_UART_INT_BUSY_DETECTED”中断,似乎波特率是错误的。配置代码如下://///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////空白console_uart_leave_from_sleepmode(空白){hw_wkup_set_pin_state (UART_RX_PORT UART_RX_PIN,假);hw_gpio_set_pin_function (UART_RX_PORT UART_RX_PIN HW_GPIO_MODE_INPUT_PULLUP,HW_GPIO_FUNC_UART_RX);// RX引脚enableconsole_uart_init ();uart_rx_int_enable (HW_UART1,真实);}空白console_uart_prepare_for_sleepmode(空白){
hw_wkup_init(空);hw_wkup_reset_counter ();hw_wkup_set_debounce_time (0);hw_wkup_set_counter_threshold (1);
hw_gpio_set_pin_function(HW_GPIO_PORT_4, HW_GPIO_PIN_7, HW_GPIO_MODE_INPUT_PULLUP, HW_GPIO_FUNC_GPIO);hw_wkup_set_pin_state(HW_GPIO_PORT_4, HW_GPIO_PIN_7, true);//配置rx pin为唤醒引脚hw_wkup_set_pin_trigger (HW_GPIO_PORT_4 HW_GPIO_PIN_7 HW_WKUP_PIN_STATE_LOW);hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
hw_gpio_set_pin_function (UART_RX_PORT UART_RX_PIN HW_GPIO_MODE_INPUT,//关闭RX引脚uart_rx_int_enable (HW_UART1假);uart_clock_disable ();}
你好提到,
UART硬件在扩展睡眠模式下是关闭的,因此您不能使用它来唤醒系统。
然而,有一个变通方法,你必须非常小心,这不是一个官方推荐的方法。
您可以将UART引脚映射到GPIO,以便在入睡前进行外部唤醒,并使用它作为唤醒触发器,然后在唤醒后将引脚映射回UART,以通过UART接收数据。
但是,你必须非常小心管理以下的事情:波特率,脱扣和觉醒延迟。
最好的
信用证
你好,信用证
你能给我一个演示代码来学习吗?
你好提到,
此方法用于下面提到的无代码项目。以user_prepare_sleep()函数为起点。
https://support.dialog-semiconductor.com/connectivity/reference-design/smartbond-codeless-serial-link
最好的
信用证
你好,信用证
文件显示我是“受限制的”。可以给我下载的权限吗?
我的电子邮件:414095539 @qq.com
你好提到,
这是由于在下载文件之前需要接受许可协议。请接受许可,您应该能够在这个支持门户上下载文件。
最好的
信用证
你好,信用证
我已经接受了许可协议并提交了,但是它没有回复我,我仍然无法访问下载文件。
你好提到,
你能在你的个人资料中提供一个有效的地址和其他细节吗?我们需要一些有效的信息来提供对门户上内容的访问。
最好的
信用证
你好,信用证,
我更新了我的个人资料。请再检查一遍。
嗨提到,
您现在应该可以下载内容了。
最好的
信用证
你好,信用证,
现在它可以通过uart rx引脚从延长睡眠模式中唤醒。但有时它会在系统唤醒后输入“HW_UART_INT_BUSY_DETECTED”中断。虽然我可以使用“hw_uart_transmit_fifo_empty(uart)”退出“HW_UART_INT_BUSY_DETECTED”中断,我发现波特率是不正确的,导致错误的字符传输。如何解决这个问题?
你好提到,
所以首先,你在进入睡眠模式之前将UART Rx引脚配置为GPIO,并且你在这个引脚上启用了唤醒中断,有1个事件计数。为了唤醒系统,你要发送一个@字符,它可以在足够的时钟周期内拉低引脚。
在您醒来之后,您将启用UART。您的实现这样做了吗?您仍然会看到HW_UART_INT_BUSY_DETECTED中断。请证实。
最好的
信用证
你好,信用证
是的,我可以配置UART Rx引脚作为GPIO唤醒引脚,并可以唤醒系统。现在它在大多数情况下都很有效。但我并没有只发送一个@字符。因为有时一个@字符不足以唤醒时钟周期。但是,当我发送一个长字符串(超过20字节@字符,波特率38400)来唤醒系统时,更容易发生“HW_UART_INT_BUSY_DETECTED”中断,似乎波特率是错误的。
配置代码如下:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
空白console_uart_leave_from_sleepmode(空白)
{
hw_wkup_set_pin_state (UART_RX_PORT UART_RX_PIN,假);
hw_gpio_set_pin_function (UART_RX_PORT UART_RX_PIN HW_GPIO_MODE_INPUT_PULLUP,
HW_GPIO_FUNC_UART_RX);// RX引脚enable
console_uart_init ();
uart_rx_int_enable (HW_UART1,真实);
}
空白console_uart_prepare_for_sleepmode(空白)
{
hw_wkup_init(空);
hw_wkup_reset_counter ();
hw_wkup_set_debounce_time (0);
hw_wkup_set_counter_threshold (1);
hw_gpio_set_pin_function(HW_GPIO_PORT_4, HW_GPIO_PIN_7, HW_GPIO_MODE_INPUT_PULLUP, HW_GPIO_FUNC_GPIO);
hw_wkup_set_pin_state(HW_GPIO_PORT_4, HW_GPIO_PIN_7, true);//配置rx pin为唤醒引脚
hw_wkup_set_pin_trigger (HW_GPIO_PORT_4 HW_GPIO_PIN_7 HW_WKUP_PIN_STATE_LOW);
hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
hw_gpio_set_pin_function (UART_RX_PORT UART_RX_PIN HW_GPIO_MODE_INPUT,
//关闭RX引脚
uart_rx_int_enable (HW_UART1假);
uart_clock_disable ();
}