打印
[活动专区]

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

[复制链接]
1206|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 北方西门吹雪 于 2022-8-9 20:32 编辑


1AT32WB415的蓝牙使用一种独特的模式,是通过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[BIM_UART0_RX_FIFO_MAX_COUNT];
     extern uint8_t uart_download_status;
    static uint16_t bim_uart_temp,uart_buff_read;
     static int32_t  check_cnt=0;
     static uint8_t read_buf[16];
     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[14]|(read_buf[15]<<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电脑端的 蓝牙接收器不? 还是需要额外加一个蓝牙适配器 ? ...

可以直接连接

使用特权

评论回复
5
freeelectron| | 2022-9-25 16:22 | 只看该作者
这个只能叫做sip封装,算不上双核

使用特权

评论回复
6
typeof| | 2022-10-1 12:52 | 只看该作者
这个的功能怎么样                           

使用特权

评论回复
7
mmbs| | 2022-10-1 13:39 | 只看该作者
是单独开发蓝牙的吗              

使用特权

评论回复
8
wilhelmina2| | 2022-10-1 14:05 | 只看该作者
做物联网的简单了,集成了无线功能   

使用特权

评论回复
9
hearstnorman323| | 2022-10-1 14:31 | 只看该作者
这个是远程控制的首选吗              

使用特权

评论回复
10
usysm| | 2022-10-1 15:05 | 只看该作者
无线蓝牙转串口小助手可以              

使用特权

评论回复
11
htmlme| | 2022-10-1 15:54 | 只看该作者
全新一代低功耗无线蓝牙MCU,不错。   

使用特权

评论回复
12
hearstnorman323| | 2022-10-1 16:46 | 只看该作者
雅特力AT32WB415是合体芯片,一个MCU加一个蓝牙  

使用特权

评论回复
13
lzbf| | 2022-10-1 17:37 | 只看该作者
这个如何使用at指令进行驱动              

使用特权

评论回复
14
wwppd| | 2022-10-1 18:29 | 只看该作者
如何通过WB415的蓝牙模块来进行OTA升级  

使用特权

评论回复
15
caigang13| | 2022-10-3 11:50 | 只看该作者
又见西门吹雪楼主

使用特权

评论回复
16
Undshing| | 2022-10-5 20:48 | 只看该作者
蓝牙是单独开发吗

使用特权

评论回复
评论
北方西门吹雪 2022-10-8 10:57 回复TA
不需要,用标准at代码就可以l 
17
chenqianqian| | 2022-10-8 20:52 | 只看该作者
内部蓝牙芯片是ARM9内核?

使用特权

评论回复
18
youtome| | 2022-11-1 10:08 | 只看该作者
如何配置蓝牙的模式呢?              

使用特权

评论回复
19
uytyu| | 2022-11-1 10:37 | 只看该作者
怎么进入AT指令配置蓝牙模块呢              

使用特权

评论回复
20
单片小菜| | 2022-11-11 16:33 | 只看该作者
求加好友,有些问题希望您指导一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

102

帖子

1

粉丝