ch32v208 蓝牙被中断破坏

串口打印 重连也不好用 估计toms被打破了

Conn 1 - Int 28
Connected..
Update 1 - Int 6
Update 1 - Int a
RSSI -34 dB CoRun at EXTI
n  1
RSSI -34 dB Conn  1
RSSI -34 dB Conn  1
Disconnected.. Reason:8
Advertising..


/***********************************

peripheral.c   启动或停止电机

static void performPeriodicTask(void)
{
    GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);
    GPIO_WriteBit(GPIOC, GPIO_Pin_6, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

}

/********************************************


peripheral_main.c

void EXTI4_INT_INIT(void)
{

内嵌运放的输出为高电平就启动中断
    EXTI_InitTypeDef EXTI_InitStructure = {0};
    NVIC_InitTypeDef NVIC_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);


    /* GPIOA ----> EXTI_Line0 */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);
    EXTI_InitStructure.EXTI_Line = EXTI_Line4;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}


int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
#ifdef DEBUG
    USART_Printf_Init( 115200 );
#endif
    PRINT("%s\n", VER_LIB);
    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    GPIO_INIT();
    OPA2_Init();
    EXTI4_INT_INIT();

    WCHBLE_Init();
    HAL_Init();
    GAPRole_PeripheralInit();
    Peripheral_Init();
    Main_Circulation();
}

中断
void EXTI4_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line4)!=RESET)
  {
    printf("Run at EXTI\r\n");
    EXTI_ClearITPendingBit(EXTI_Line4);     /* Clear Flag */
  }
}


中断是快进快出,一般是不会影响蓝牙的运行情况。

注意不要在中断里面调用的函数在FLASH运行并且频繁进出中断,可以在函数上方加上highcode,放在RAM中运行。

需要注意函数的声明:void?EXTI0_IRQHandler(void)?__attribute__((interrupt("WCH-Interrupt-fast")));

如果是驱动电机,则需要注意供电是否跟电机的供电分开,因为电机工作需要的电流比较大,可能造成无法驱动蓝牙射频,因此可以先单独测试蓝牙不测试电机,排除电机干扰。


只有登录才能回复,可以选择微信账号登录