我的GPIO无法在醒来后改变状态

5个帖子/ 0新
最后一篇
兰迪宇
离线
最后一次露面:2年10个月前
加入:2015-01-28 08:49
我的GPIO无法在醒来后改变状态

Q1:我希望在建立连接时LED亮起,然后睡觉时关闭,
我的代码如下
void periph_init(空白)
{
....
gpio_configurepin(gpio_led_port,gpio_led_pin,输出,pid_gpio,false); // p03设置为低
}

void user_before_sleep(void)
{
......
GPIO_CONFIGUREPIN(GPIO_LED_PORT,GPIO_LED_PIN,输出,PID_GPIO,FALSE); //设置为低睡眠前的省电
}

void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
GPIO_CONFIGUREPIN(GPIO_LED_PORT,GPIO_LED_PIN,OUTPUT,PID_GPIO,TRUE); //当连接设置高时
}

你能告诉我为什么PIN仍然输出低电平,我已经建立了连接虽然。
我怎样才能改变它?
Q2:
这个getBits16的含义是什么(sys_stat_reg,per_is_down?当设备唤醒时,我是否可以需要它?
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}

谢谢你

关键词:
设备:
兰迪宇
离线
最后一次露面:2年10个月前
加入:2015-01-28 08:49
如果修改如下,则

如果在下面修改,电压为0.8-0.9V
void periph_init(空白)
{
....
gpio_configurepin(gpio_led_port,gpio_led_pin,输出,pid_gpio,true); // p03设置为高
}

void user_before_sleep(void)
{
......
GPIO_CONFIGUREPIN(GPIO_LED_PORT,GPIO_LED_PIN,输出,PID_GPIO,FALSE); //设置为低睡眠前的省电
}

void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
GPIO_CONFIGUREPIN(GPIO_LED_PORT,GPIO_LED_PIN,OUTPUT,PID_GPIO,TRUE); //当连接设置高时
}

如果我关闭睡眠配置,那将是好的
我花了两天来解决这个奇怪的问题,请给我一家帮助,非常感谢你。

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨兰迪宇,

嗨兰迪宇,

由于我在上一个问题中提到了,当您睡觉时,外围设备已关闭,但销的状态在其先前的条件下保留。您正在连接的事实不是意味着设备永远不会睡觉,这意味着设备唤醒以保持连接还活着,然后睡眠以便节省电量,然后在预定的连接间隔内睡眠状态保持活力的链接。因此,当您将引脚设置为高电平时,580将启动连接,但这并不意味着将保持令人醒着的形式,它会定期睡觉并定期唤醒,因此它将通过User_Before_Sleep()并将输出变为低电平。为了做你想要的,正如我在你的另一个帖子中提到的那样,必须在处理程序中放置一个变量,以记录输出的状态(应用程序转动输出高)和Periph_init函数检查变量是否设置并将GPIO设置为主动或非活动,并在睡眠前删除用户,以便在连接时保持输出高。

例如:

1)声明变量UINT8_T PIN_HIGH;

2)在Periph_init中放置以下代码:

如果(!pin_high)
gpio_configurepin(gpio_led_port,gpio_led_pin,输出,pid_gpio,false);
别的
GPIO_CONFIGUREPIN(GPIO_LED_PORT,GPIO_LED_PIN,输出,PID_GPIO,TRUE);

3)删除user_before_sleep()函数。

4)在app_on_connection函数中:
pin_high = 1;

5)在app_on_disconnect函数中:

Pin_high = 0;

谢谢mt_dialog.

兰迪宇
离线
最后一次露面:2年10个月前
加入:2015-01-28 08:49
谢谢你我修改了

谢谢你,我已经修改了代码。
需要我声明变量
UINT8_T PIN_HIGH__ATTRIBUTE _((部分(“保留_men_area0”),ZERO_INIT));
正如你在连接状态下所说的那样,奴隶也可以睡觉。
所以我认为从连接状态唤醒时,Pin_high的值将丢失。
如果我想保留这个值,就是这样(uint8_t pin_high __attribute _((部分(“retent_men_area0”),zero_init);。?

谢谢你!

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨兰迪宇,

嗨兰迪宇,

它取决于您使用的睡眠是什么样的睡眠,如果您在延长睡眠中,您不需要在保留区域中设置变量,Sysram始终为此,因此值不会在睡眠模式下丢失,但如果您正在使用深度睡眠,是的,您必须在保留区域中设置变量。

谢谢mt_dialog.