北方西门吹雪 发表于 2022-8-9 20:28

【AT-START-WB415测评】+ 主从双核驱动蓝牙

本帖最后由 北方西门吹雪 于 2022-8-9 20:32 编辑


1、AT32WB415的蓝牙使用一种独特的模式,是通过UART串口连接专有内核的蓝牙模块从而实现蓝牙功能的。因此,这里的双核是主从模式,主MCU常驻,作为主控,蓝牙模块作为从模块,接受AT指令,实现交互。这种模式是一种比较常见的模式,很多蓝牙功能的芯片,都可以工作在从模块的方式,而AT32WB415则把蓝牙模块固化到芯片里,提高了PCB设计的集成度。从蓝牙编程来说,底层的开发就完全固化到了蓝牙模块中,只要熟读AT兵书就可以快速开发。2、使用MDK开发是一个比较方便的方式,但是这里的蓝牙从模块是使用了ARM9的指令集,需要在keil扩展开发包,安装方式如下 具体的版本说明如下,这个扩展包使用与MDK5.25以后的版本 3、按照说明,需要先把蓝牙模块的栈写入3.1 下载蓝牙栈模块代码BK3432_bim,直接编译 显然,其中的bim_app.c使用了串口通信,代码如下void bim_main(void)
{
   extern uint16_t uart_buff_write;
   extern uint8_t bim_uart_rx_buf;
   extern uint8_t uart_download_status;
    static uint16_t bim_uart_temp,uart_buff_read;
   static int32_tcheck_cnt=0;
   static uint8_t read_buf;
   static uint16_t rom_ver;
   int32_t main_point = MAIN_IMAGE_RUN_ADDR;
    updata_memset32((uint8_t *)0x00400000, 1, 1);
   bim_icu_init(ICU_CLK_16M);
   bim_flash_init();
   bim_uart_init(115200);
   bim_flash_read(FLASH_SPACE_TYPE_MAIN, 0x2010/4, 16, read_buf);
    rom_ver = ( read_buf|(read_buf<<8) );
   REG_AHB0_ICU_INT_ENABLE = (0x01 << 5);
   REG_AHB0_ICU_IRQ_ENABLE = 0x03;
   __enable_irq();
   //bim_uart_write("boot start\r\n");
   //REG_APB5_GPIOD_CFG = 0Xff;
   //REG_APB5_GPIOD_DATA = 0X00;
   while(1)
   {
          bim_uart_temp=uart_buff_write;
          if (uart_buff_read < bim_uart_temp)
          {
               //REG_APB5_GPIOD_DATA = 0X00;
               bim_uart_data_callback(bim_uart_rx_buf + uart_buff_read, bim_uart_temp - uart_buff_read);
               uart_buff_read = bim_uart_temp;
          }
         else if (uart_buff_read > bim_uart_temp)
          {
               bim_uart_data_callback(bim_uart_rx_buf + uart_buff_read, sizeof(bim_uart_rx_buf) - uart_buff_read);
               bim_uart_data_callback(bim_uart_rx_buf, bim_uart_temp);
               uart_buff_read = bim_uart_temp;
               //REG_APB5_GPIOD_DATA = 0X00;
          }
          else
         {
               if(uart_download_status==0 && rom_ver!=0xffff)
               {
                  if(check_cnt++>50000) //30ms
                  {
                         check_cnt=0;
                         //REG_APB5_GPIOD_DATA = 0XFF;
                         break;
                  }
               }
          }
   }
   __disable_irq( );
   REG_AHB0_ICU_INT_ENABLE = 0x00;
   REG_AHB0_ICU_IRQ_ENABLE = 0x00;
    updata_memset32((uint8_t *)0x00400000, 0, 1);
   bim_uart_deinit();
   if(1 == bim_select_sec())
   {
          //bim_uart_write("image-main_RUN ADDR = 0x2010\r\n");
          (*(FUNCPTR)main_point)();
   }
}
这个工程只是生产了通用代码,需要用ICP模式写入共享内存的指定位置,并不能通过这个工程直接下载并调试,可以看到这个BK3432的内核是ARM9.启动ICP programmer,提示升级firmware,当然可以忽略, 同样可以连接上开发板选择并添加适合的蓝牙固件,确定BLE的栈从0x00000000开始写入。选择下载就可以写入蓝牙栈代码。4、主工程代码的编译和运行,下载并编译范例主MCU代码,这个是实现UART访问的功能,主要的功能就是标准的串口AT指令控制主代码如下int main(void)
{   
gpio_init_typegpio_init_struct;
#ifdef BT_FLASH_WR_TEST
uint8_t data;
#endif
   system_clock_config();
   at32_board_init();
at32_button_init();
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(USART3_IRQn, 0, 0);
nvic_irq_enable(USART2_IRQn, 0, 1);
    /* USART1configured as follow:
      -BaudRate = 115200 baud
      - WordLength = 8 Bits
      - One Stop Bit
      - Noparity
      -Hardware flow control disabled (RTS and CTS signals)
      -Receive and transmit enabled
*/
crm_periph_clock_enable(CRM_USART3_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
gpio_pin_remap_config(USART3_GMUX_0010, TRUE);
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type=GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode= GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_7;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type=GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_6;
gpio_init_struct.gpio_pull = GPIO_PULL_UP;
gpio_init(GPIOA, &gpio_init_struct);
uart_print_init(115200);
printf("Print Test\r\n");
usart_init(USART3, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART3, TRUE);
usart_receiver_enable(USART3, TRUE);
/* Enable theUSARTx Interrupt */
usart_interrupt_enable(USART3, USART_RDBF_INT, TRUE);
usart_enable(USART3,TRUE);   
/* Output amessage on Hyperterminal using printf function */   
delay_ms(1000);
while (1)
{
   if(at32_button_press() == USER_BUTTON)
    {
   UART_TP_MODE = (flag_status)!UART_TP_MODE;
   if(UART_TP_MODE)
      {
       switch_mode_flag = SET;
       at_cmd_send(AT_CMD_TP_MODE_ON);
       while(cmd_rsp_get(AT_TP_MODE_OK1) != RSP_OK);
       switch_mode_flag = RESET;
       at32_led_on(LED3);
       printf("enter uart tp mode\r\n");
      }
      else
      {      
       switch_mode_flag = SET;
       at_cmd_send(AT_CMD_TP_MODE_OFF);
       while(cmd_rsp_get(AT_TP_MODE_OK0) != RSP_OK);
       switch_mode_flag = RESET;
       at32_led_off(LED3);
       printf("leave uart tp mode\r\n");
      }
    }   
   if(UART_TP_MODE)
    {
   tp_mode_rx_handler();
   tp_mode_tx_handler();
    }
    else
    {
   at_cmd_handler();
    }
}
}
这个代码可以也用ICP Programmer写入,写入地址0x08000000,这时的蓝牙栈同时写入。开始下载,开发过程先忽略用户区数据保护的功能,下载成功,
这个主程序的工程已经配置为使用AT-link下载,可以直接在如下地址写入,同时继续使用蓝牙栈,这样提升了开发效率。 5、代码运行开发板上有BLE reset和MCU reset,以及USER用户键,重新启动开发板,初始化后,连接串口115200-8-1-N 同时在手机端可以发现WB415-GATT的蓝牙设备 连接成功。蓝牙创建连接成功Pass。

lvben5d 发表于 2022-8-9 23:51

楼主,请问这个蓝牙 可以直接连 PC电脑端的 蓝牙接收器不? 还是需要额外加一个蓝牙适配器 ?

yangxiaor520 发表于 2022-8-10 08:21

看看,蓝牙传输距离咋样?

北方西门吹雪 发表于 2022-9-19 15:54

lvben5d 发表于 2022-8-9 23:51
楼主,请问这个蓝牙 可以直接连 PC电脑端的 蓝牙接收器不? 还是需要额外加一个蓝牙适配器 ? ...

可以直接连接

freeelectron 发表于 2022-9-25 16:22

这个只能叫做sip封装,算不上双核

typeof 发表于 2022-10-1 12:52

这个的功能怎么样                           

mmbs 发表于 2022-10-1 13:39

是单独开发蓝牙的吗            

wilhelmina2 发表于 2022-10-1 14:05

做物联网的简单了,集成了无线功能   

hearstnorman323 发表于 2022-10-1 14:31

这个是远程控制的首选吗            

usysm 发表于 2022-10-1 15:05

无线蓝牙转串口小助手可以            

htmlme 发表于 2022-10-1 15:54

全新一代低功耗无线蓝牙MCU,不错。   

hearstnorman323 发表于 2022-10-1 16:46

雅特力AT32WB415是合体芯片,一个MCU加一个蓝牙

lzbf 发表于 2022-10-1 17:37

这个如何使用at指令进行驱动            

wwppd 发表于 2022-10-1 18:29

如何通过WB415的蓝牙模块来进行OTA升级

caigang13 发表于 2022-10-3 11:50

又见西门吹雪楼主

Undshing 发表于 2022-10-5 20:48

蓝牙是单独开发吗

chenqianqian 发表于 2022-10-8 20:52

内部蓝牙芯片是ARM9内核?

youtome 发表于 2022-11-1 10:08

如何配置蓝牙的模式呢?            

uytyu 发表于 2022-11-1 10:37

怎么进入AT指令配置蓝牙模块呢            

单片小菜 发表于 2022-11-11 16:33

求加好友,有些问题希望您指导一下
页: [1] 2
查看完整版本: 【AT-START-WB415测评】+ 主从双核驱动蓝牙