【AT32WB415测评】串口通信测试(包含蓝牙测试)
<div class='showpostmsg'><p><strong><span style="font-size:16px;">06 串口通信测试(包含蓝牙测试)</span></strong></p><p><strong><span style="font-size:16px;">前言</span></strong></p>
<p><span style="font-size:16px;"> 再前几篇对开发板的一些资源进行了初步了解和实现,接下来准备体验串口通信功能,蓝牙的控制指令其实就是AT指令,通过串口进行通信的,在此之前先体验另外的串口;</span></p>
<p> </p>
<p><strong><span style="font-size:16px;">目标</span></strong></p>
<p><span style="font-size:16px;"> 熟悉串口的基本配置和基本操作;</span></p>
<p><span style="font-size:16px;"> 增加部分串口命令的实现,例如设置时间;</span></p>
<p> </p>
<p><strong><span style="font-size:16px;">实现</span></strong></p>
<p><span style="font-size:16px;">1、熟悉串口配置</span></p>
<p><span style="font-size:16px;"> 结合将要实现蓝牙控制AT指令的发送接受需求,这种串口通信的完成一般会通过空闲中断+DMA方式实现,这样可以避免多次进入串口中断。需要注意蓝牙串口UART21和MCU的串口USART3是内联的,而USART1又与IIC引脚冲突,所以只能选择USART2,串口之间的DMA通道互不冲突,不过共用DMA1,为了避免通道数据冲突,就把DMA1给USART3,所以USART2配置成通过中断收发数据。</span></p>
<p><span style="font-size:16px;">前面的SPI测试占用了USART2,需要将相应引脚迁移。</span></p>
<p><span style="font-size:16px;">1)USART2</span></p>
<p><span style="font-size:16px;">初始化如下:</span></p>
<pre>
<code>void USART2_init(void)
{
gpio_init_type gpio_init_struct;
/* enable the usart2 and gpio clock */
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
/* enable iomux clock */
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_init_struct);
/* configure the usart2 tx pin */
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_2;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
/* configure the usart2 rx pin */
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_3;
gpio_init_struct.gpio_pull = GPIO_PULL_UP;
gpio_init(GPIOA, &gpio_init_struct);
/* config usart nvic interrupt */
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(USART2_IRQn, 0, 1);
/* configure usart2 param */
usart_init(USART2, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART2, TRUE);
usart_receiver_enable(USART2, TRUE);
/* enable usart2 interrupt */
usart_interrupt_enable(USART2, USART_RDBF_INT, TRUE);
usart_enable(USART2, TRUE);
}</code></pre>
<p> </p>
<p><span style="font-size:16px;">中断处理:</span></p>
<pre>
<code>uint8_t USART2RecePackBuf = {0};
uint8_t RecePackBuf = {0};
typedef struct
{
uint8_t STX_1;
uint8_t STX_2;
uint8_t Length;
uint8_t CMD;
uint8_t CHECKSUM_1;
uint8_t ing_step;
uint8_t ReturnCnt;
}Communicate_Data;
Communicate_Data Com_Data;
void USART2_deal(uint8_t USART_data)
{
uint8_t check = 0;
if(USART_data == 0xA5 && Com_Data.ing_step == 0)
{
Com_Data.STX_1 = 0xA5;
Com_Data.ing_step = 1;
}
else if(USART_data == 0x5A && Com_Data.ing_step == 1)
{
Com_Data.STX_2 = 0x5A;
Com_Data.ing_step = 2;
}
else if(Com_Data.ing_step == 2)
{
Com_Data.Length = USART_data;
Com_Data.ing_step = 3;
}
else if(Com_Data.ing_step == 3)
{
USART2RecePackBuf = USART_data;
Com_Data.ReturnCnt ++;
if(Com_Data.Length == Com_Data.ReturnCnt)
{
Com_Data.CHECKSUM_1 = USART2RecePackBuf;
for(uint8_t i=0;i<Com_Data.Length-1;i++)
{
check += USART2RecePackBuf;
}
if(Com_Data.CHECKSUM_1 = check)//校验成功
{
line_flg = 2;
Com_Data.CMD = USART2RecePackBuf;
memcpy(RecePackBuf,USART2RecePackBuf,Com_Data.Length);
memset(USART2RecePackBuf, 0,Com_Data.Length);//清空接收包
}
else
{
memset(USART2RecePackBuf, 0,ARRAYNUM(USART2RecePackBuf));//清空接收包
memset(&Com_Data,0,sizeof(Com_Data));//清空结构体
}
}
}
else
{
memset(USART2RecePackBuf, 0,ARRAYNUM(USART2RecePackBuf));//清空接收包
memset(&Com_Data,0,sizeof(Com_Data));//清空结构体
}
}</code></pre>
<p> </p>
<p><span style="font-size:16px;">通信协议解析:</span></p>
<pre>
<code>void CMD_analyze(uint8_t USBorUSART)
{
memset(SendPackBuf,0,ARRAYNUM(SendPackBuf));//清空发送包
switch(Com_Data.CMD)
{
case 0x01://设置时间
eRTC_set.year= RecePackBuf;
eRTC_set.month = RecePackBuf;
eRTC_set.day = RecePackBuf;
eRTC_set.hour= RecePackBuf;
eRTC_set.min = RecePackBuf;
eRTC_set.sec = RecePackBuf;
eRTC_set.week= RecePackBuf;
Set_Time(&eRTC_set);
break;
default:break;
}
memset(RecePackBuf, 0,ARRAYNUM(RecePackBuf));//清空接收包
memset(&Com_Data,0,sizeof(Com_Data));//清空结构体
}</code></pre>
<p> </p>
<p><span style="font-size:16px;">2)USART3蓝牙</span></p>
<p><span style="font-size:16px;">初始化:</span></p>
<pre>
<code>void USART3_init(void)
{
gpio_init_type gpio_init_struct;
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);
usart_init(USART3, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART3, TRUE);
usart_receiver_enable(USART3, TRUE);
usart_dma_receiver_enable(USART3, TRUE);
USART3_DMA1_config();
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(USART3_IRQn, 0, 0);
/* Enable the USARTx Interrupt */
usart_interrupt_enable(USART3, USART_IDLE_INT, TRUE);
//usart_interrupt_enable(USART3, USART_RDBF_INT, TRUE);
usart_enable(USART3, TRUE);
}</code></pre>
<p> </p>
<p><span style="font-size:16px;">DMA配置:</span></p>
<pre>
<code>void USART3_DMA1_config(void)
{
dma_init_type dma_init_struct;
/* enable dma1 clock */
crm_periph_clock_enable(CRM_DMA1_PERIPH_CLOCK, TRUE);
/* dma1 channel3 for usart1 tx configuration */
dma_reset(DMA1_CHANNEL3);
dma_default_para_init(&dma_init_struct);
dma_init_struct.direction = DMA_DIR_PERIPHERAL_TO_MEMORY;//外设到内存
dma_init_struct.memory_base_addr = (uint32_t)USART3RecePackBuf;//内存接收基地址
dma_init_struct.memory_inc_enable = TRUE;//内存地址递增
dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_BYTE;//8位数据
dma_init_struct.buffer_size = ARRAYNUM(USART3RecePackBuf);
dma_init_struct.peripheral_base_addr = (uint32_t)&USART3->dt;//外设地址
dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_BYTE;//外设数据长度
dma_init_struct.peripheral_inc_enable = FALSE;//外设地址不增加
dma_init_struct.priority = DMA_PRIORITY_MEDIUM;//最高DMA通道
dma_init_struct.loop_mode_enable = TRUE;
dma_init(DMA1_CHANNEL3, &dma_init_struct);
/* config flexible dma for usart3 Rx */
dma_flexible_config(DMA1, FLEX_CHANNEL3, DMA_FLEXIBLE_UART3_RX);
dma_channel_enable(DMA1_CHANNEL3, TRUE); /* usart1 tx begin dma transmitting */
}</code></pre>
<p> </p>
<p><span style="font-size:16px;">中断处理:</span></p>
<pre>
<code>void USART3_DMA_deal(void)
{
uint8_t ReturnCnt;
uint8_t check = 0;
dma_channel_enable(DMA1_CHANNEL3, FALSE); /* 关闭DMA传输 */
ReturnCnt = ARRAYNUM(USART3RecePackBuf)-dma_data_number_get(DMA1_CHANNEL3);
memcpy(BLEPackBuf,USART3RecePackBuf,ReturnCnt);
memset(USART3RecePackBuf, 0,ReturnCnt);//清空接收包
//usart_data_transmit(USART0, RecePackBuf);
//while((usart_flag_get(USART0, USART_FLAG_TBE) == RESET));
if(BLEPackBuf == 0xA5 && BLEPackBuf == 0x5A)
{
Com_Data.Length = BLEPackBuf;
Com_Data.CHECKSUM_1 = BLEPackBuf;
for(uint8_t i=0;i<Com_Data.Length-1;i++)
{
check += BLEPackBuf;
}
if(Com_Data.CHECKSUM_1 = check)//校验成功
{
line_flg = 3;
memcpy(RecePackBuf,BLEPackBuf+3,ReturnCnt-4);
Com_Data.CMD = RecePackBuf;
memset(BLEPackBuf, 0,Com_Data.Length+3);//清空接收包
}
else
{
memset(BLEPackBuf, 0,ARRAYNUM(BLEPackBuf));//清空接收包
memset(&Com_Data,0,sizeof(Com_Data));//清空结构体
}
}
USART3_DMA1_config();
}</code></pre>
<p> </p>
<p><span style="font-size:16px;"> 注意蓝牙的无线通信其实使用的就是蓝牙的透传模式;对蓝牙的修改使用的命令模式,通过标准的AT指令进行,例如修改蓝牙名等。我这里打一个小问号,通常BLE蓝牙需要进行流控,针对手中目前使用的BLE蓝牙模块是存在流控引脚的,避免状态不对导致的数据丢失,尤其是在上电的那个阶段,在本芯片中没有发现这些流控,针对BLE的芯目前研究的还只是皮毛,要继续的研究这些还需要下功夫,本次的芯片测试也告一段落,希望有机会能实际使用该芯片参与实际项目设计。</span></p>
<p><!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjYwNTQtMTY2MDg5MDM2MjczNSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiIwIn0seyJjaGFyIjoiNiJ9LHsiY2hhciI6IiAifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLkv6EifSx7ImNoYXIiOiLmtYsifSx7ImNoYXIiOiLor5UifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI5NDUxLTE2NjA4OTAzNzY0OTIiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5YmNIn0seyJjaGFyIjoi6KiAIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiODQ3MS0xNjYwODkwMzg1NTc0IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWGjSJ9LHsiY2hhciI6IuWJjSJ9LHsiY2hhciI6IuWHoCJ9LHsiY2hhciI6IuevhyJ9LHsiY2hhciI6IuWvuSJ9LHsiY2hhciI6IuW8gCJ9LHsiY2hhciI6IuWPkSJ9LHsiY2hhciI6IuadvyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuS6myJ9LHsiY2hhciI6Iui1hCJ9LHsiY2hhciI6Iua6kCJ9LHsiY2hhciI6Iui/myJ9LHsiY2hhciI6IuihjCJ9LHsiY2hhciI6IuS6hiJ9LHsiY2hhciI6IuWInSJ9LHsiY2hhciI6IuatpSJ9LHsiY2hhciI6IuS6hiJ9LHsiY2hhciI6IuinoyJ9LHsiY2hhciI6IuWSjCJ9LHsiY2hhciI6IuWuniJ9LHsiY2hhciI6IueOsCJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaOpSJ9LHsiY2hhciI6IuS4iyJ9LHsiY2hhciI6IuadpSJ9LHsiY2hhciI6IuWHhiJ9LHsiY2hhciI6IuWkhyJ9LHsiY2hhciI6IuS9kyJ9LHsiY2hhciI6IumqjCJ9LHsiY2hhciI6IuS4siJ9LHsiY2hhciI6IuWPoyJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6IuS/oSJ9LHsiY2hhciI6IuWKnyJ9LHsiY2hhciI6IuiDvSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuiTnSJ9LHsiY2hhciI6IueJmSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuaOpyJ9LHsiY2hhciI6IuWItiJ9LHsiY2hhciI6IuaMhyJ9LHsiY2hhciI6IuS7pCJ9LHsiY2hhciI6IuWFtiJ9LHsiY2hhciI6IuWuniJ9LHsiY2hhciI6IuWwsSJ9LHsiY2hhciI6IuaYryJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoi5oyHIn0seyJjaGFyIjoi5LukIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi6L+HIn0seyJjaGFyIjoi5LiyIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi6L+bIn0seyJjaGFyIjoi6KGMIn0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi5L+hIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoi5q2kIn0seyJjaGFyIjoi5LmLIn0seyJjaGFyIjoi5YmNIn0seyJjaGFyIjoi5YWIIn0seyJjaGFyIjoi5L2TIn0seyJjaGFyIjoi6aqMIn0seyJjaGFyIjoi5Y+mIn0seyJjaGFyIjoi5aSWIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5LiyIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi77ybIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNDI3OS0xNjYwODkwNTUyMTA1IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI3NDI4LTE2NjA4OTA1NTIzMDQiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi55uuIn0seyJjaGFyIjoi5qCHIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNDcxNi0xNjYwODkwNTUzMjI3IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IueGnyJ9LHsiY2hhciI6IuaCiSJ9LHsiY2hhciI6IuS4siJ9LHsiY2hhciI6IuWPoyJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWfuiJ9LHsiY2hhciI6IuacrCJ9LHsiY2hhciI6IumFjSJ9LHsiY2hhciI6Iue9riJ9LHsiY2hhciI6IuWSjCJ9LHsiY2hhciI6IuWfuiJ9LHsiY2hhciI6IuacrCJ9LHsiY2hhciI6IuaTjSJ9LHsiY2hhciI6IuS9nCJ9LHsiY2hhciI6Iu+8myJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjcwNTAtMTY2MDg5MDU1MzIyNyIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlop4ifSx7ImNoYXIiOiLliqAifSx7ImNoYXIiOiLpg6gifSx7ImNoYXIiOiLliIYifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLlkb0ifSx7ImNoYXIiOiLku6QifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLlpoIifSx7ImNoYXIiOiLorr4ifSx7ImNoYXIiOiLnva4ifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLpl7QifSx7ImNoYXIiOiLvvJsifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI2NDMyLTE2NjA4OTA1NTMyMjciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbXSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6Ijk4NzMtMTY2MDg5MDYyMTM0NCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLnjrAifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI4NDQ0LTE2NjA4OTA2MjE2MzAiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoiMSJ9LHsiY2hhciI6IuOAgSJ9LHsiY2hhciI6IueGnyJ9LHsiY2hhciI6IuaCiSJ9LHsiY2hhciI6IuS4siJ9LHsiY2hhciI6IuWPoyJ9LHsiY2hhciI6IumFjSJ9LHsiY2hhciI6Iue9riJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6Ijg0NjAtMTY2MDg5MDY1NDM2NSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLnu5MifSx7ImNoYXIiOiLlkIgifSx7ImNoYXIiOiLlsIYifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifSx7ImNoYXIiOiLmjqcifSx7ImNoYXIiOiLliLYifSx7ImNoYXIiOiJBIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IuaMhyJ9LHsiY2hhciI6IuS7pCJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWPkSJ9LHsiY2hhciI6IumAgSJ9LHsiY2hhciI6IuaOpSJ9LHsiY2hhciI6IuWPlyJ9LHsiY2hhciI6IumcgCJ9LHsiY2hhciI6IuaxgiJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6Iui/mSJ9LHsiY2hhciI6IuenjSJ9LHsiY2hhciI6IuS4siJ9LHsiY2hhciI6IuWPoyJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6IuS/oSJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWujCJ9LHsiY2hhciI6IuaIkCJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuiIrCJ9LHsiY2hhciI6IuS8miJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6Iui/hyJ9LHsiY2hhciI6IuepuiJ9LHsiY2hhciI6IumXsiJ9LHsiY2hhciI6IuS4rSJ9LHsiY2hhciI6IuaWrSJ9LHsiY2hhciI6IisifSx7ImNoYXIiOiJEIn0seyJjaGFyIjoiTSJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiLmlrkifSx7ImNoYXIiOiLlvI8ifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLmoLcifSx7ImNoYXIiOiLlj68ifSx7ImNoYXIiOiLku6UifSx7ImNoYXIiOiLpgb8ifSx7ImNoYXIiOiLlhY0ifSx7ImNoYXIiOiLlpJoifSx7ImNoYXIiOiLmrKEifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLlhaUifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLmlq0ifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLpnIAifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLms6gifSx7ImNoYXIiOiLmhI8ifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiQSJ9LHsiY2hhciI6IlIifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoiMiJ9LHsiY2hhciI6IjEifSx7ImNoYXIiOiLlkowifSx7ImNoYXIiOiJNIn0seyJjaGFyIjoiQyJ9LHsiY2hhciI6IlUifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjMifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlhoUifSx7ImNoYXIiOiLogZQifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLogIwifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjEifSx7ImNoYXIiOiLlj4gifSx7ImNoYXIiOiLkuI4ifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLlvJUifSx7ImNoYXIiOiLohJoifSx7ImNoYXIiOiLlhrIifSx7ImNoYXIiOiLnqoEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmiYAifSx7ImNoYXIiOiLku6UifSx7ImNoYXIiOiLlj6oifSx7ImNoYXIiOiLog70ifSx7ImNoYXIiOiLpgIkifSx7ImNoYXIiOiLmi6kifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjIifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkuLIifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLkuYsifSx7ImNoYXIiOiLpl7QifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJEIn0seyJjaGFyIjoiTSJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLpgZMifSx7ImNoYXIiOiLkupIifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLlhrIifSx7ImNoYXIiOiLnqoEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLlhbEifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiJEIn0seyJjaGFyIjoiTSJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiIxIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5Li6In0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi6YG/In0seyJjaGFyIjoi5YWNIn0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi6YGTIn0seyJjaGFyIjoi5pWwIn0seyJjaGFyIjoi5o2uIn0seyJjaGFyIjoi5YayIn0seyJjaGFyIjoi56qBIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5oqKIn0seyJjaGFyIjoiRCJ9LHsiY2hhciI6Ik0ifSx7ImNoYXIiOiJBIn0seyJjaGFyIjoiMSJ9LHsiY2hhciI6Iue7mSJ9LHsiY2hhciI6IlUifSx7ImNoYXIiOiJTIn0seyJjaGFyIjoiQSJ9LHsiY2hhciI6IlIifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoiMyJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuaJgCJ9LHsiY2hhciI6IuS7pSJ9LHsiY2hhciI6IlUifSx7ImNoYXIiOiJTIn0seyJjaGFyIjoiQSJ9LHsiY2hhciI6IlIifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoiMiJ9LHsiY2hhciI6IumFjSJ9LHsiY2hhciI6Iue9riJ9LHsiY2hhciI6IuaIkCJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6Iui/hyJ9LHsiY2hhciI6IuS4rSJ9LHsiY2hhciI6IuaWrSJ9LHsiY2hhciI6IuaUtiJ9LHsiY2hhciI6IuWPkSJ9LHsiY2hhciI6IuaVsCJ9LHsiY2hhciI6IuaNriJ9LHsiY2hhciI6IuOAgiJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjIwNDYtMTY2MDg5NTE0MzAyMSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJTIn0seyJjaGFyIjoiUCJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiLmtYsifSx7ImNoYXIiOiLor5UifSx7ImNoYXIiOiLljaAifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjIifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpnIAifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLlsIYifSx7ImNoYXIiOiLnm7gifSx7ImNoYXIiOiLlupQifSx7ImNoYXIiOiLlvJUifSx7ImNoYXIiOiLohJoifSx7ImNoYXIiOiLov4EifSx7ImNoYXIiOiLnp7sifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI4ODUwLTE2NjA4OTEyNzQ5NDIiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoiMSJ9LHsiY2hhciI6IikifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI1OTM3LTE2NjMwMzU0MzQ3NzIiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5YidIn0seyJjaGFyIjoi5aeLIn0seyJjaGFyIjoi5YyWIn0seyJjaGFyIjoi5aaCIn0seyJjaGFyIjoi5LiLIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiOTc3OC0xNjYwODkxMjg0ODEyIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI5MTI5LTE2NjMwMzUzNjM3NTgiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5LitIn0seyJjaGFyIjoi5patIn0seyJjaGFyIjoi5aSEIn0seyJjaGFyIjoi55CGIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNTY2OS0xNjYzMDM1MzkzMTczIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzNjY4LTE2NjMwMzUzOTM1OTAiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi5L+hIn0seyJjaGFyIjoi5Y2PIn0seyJjaGFyIjoi6K6uIn0seyJjaGFyIjoi6KejIn0seyJjaGFyIjoi5p6QIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNzgxNy0xNjYzMDM1NDEwNTA3IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzMDk3LTE2NjMwMzU0MTEwMjEiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoiMiJ9LHsiY2hhciI6IikifSx7ImNoYXIiOiJVIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJSIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjMifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzNDc4LTE2NjMwMzU0NTM4MTkiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5YidIn0seyJjaGFyIjoi5aeLIn0seyJjaGFyIjoi5YyWIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNjcxOC0xNjYzMDM1NDU4MDk3IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyMTEwLTE2NjMwMzU0NTg2NTciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoiRCJ9LHsiY2hhciI6Ik0ifSx7ImNoYXIiOiJBIn0seyJjaGFyIjoi6YWNIn0seyJjaGFyIjoi572uIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiOTA5MC0xNjYzMDM1NDY1MTQ4IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyMTY3LTE2NjMwMzU0NjYzMjUiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5LitIn0seyJjaGFyIjoi5patIn0seyJjaGFyIjoi5aSEIn0seyJjaGFyIjoi55CGIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNjA3NC0xNjYzMDM1NDcyNzkzIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzOTI1LTE2NjMwMzU0NzMyMDAiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi5L+hIn0seyJjaGFyIjoi5Y2PIn0seyJjaGFyIjoi6K6uIn0seyJjaGFyIjoi6KejIn0seyJjaGFyIjoi5p6QIn0seyJjaGFyIjoi5aaCIn0seyJjaGFyIjoi5LiKIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5rOoIn0seyJjaGFyIjoi5oSPIn0seyJjaGFyIjoi6JOdIn0seyJjaGFyIjoi54mZIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5pegIn0seyJjaGFyIjoi57q/In0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi5L+hIn0seyJjaGFyIjoi5YW2In0seyJjaGFyIjoi5a6eIn0seyJjaGFyIjoi5L2/In0seyJjaGFyIjoi55SoIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi6JOdIn0seyJjaGFyIjoi54mZIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6YCPIn0seyJjaGFyIjoi5LygIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi77ybIn0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi6JOdIn0seyJjaGFyIjoi54mZIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5L+uIn0seyJjaGFyIjoi5pS5In0seyJjaGFyIjoi5L2/In0seyJjaGFyIjoi55SoIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5ZG9In0seyJjaGFyIjoi5LukIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5byPIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi6L+HIn0seyJjaGFyIjoi5qCHIn0seyJjaGFyIjoi5YeGIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoiQSJ9LHsiY2hhciI6IlQifSx7ImNoYXIiOiLmjIcifSx7ImNoYXIiOiLku6QifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLlpoIifSx7ImNoYXIiOiLkv64ifSx7ImNoYXIiOiLmlLkifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifSx7ImNoYXIiOiLlkI0ifSx7ImNoYXIiOiLnrYkifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLmiJEifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLph4wifSx7ImNoYXIiOiLmiZMifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLlsI8ifSx7ImNoYXIiOiLpl64ifSx7ImNoYXIiOiLlj7cifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLluLgifSx7ImNoYXIiOiJCIn0seyJjaGFyIjoiTCJ9LHsiY2hhciI6IkUifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifSx7ImNoYXIiOiLpnIAifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLmtYEifSx7ImNoYXIiOiLmjqcifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpkogifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLmiYsifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLkvb8ifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJCIn0seyJjaGFyIjoiTCJ9LHsiY2hhciI6IkUifSx7ImNoYXIiOiLok50ifSx7ImNoYXIiOiLniZkifSx7ImNoYXIiOiLmqKEifSx7ImNoYXIiOiLlnZcifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlrZgifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLmtYEifSx7ImNoYXIiOiLmjqcifSx7ImNoYXIiOiLlvJUifSx7ImNoYXIiOiLohJoifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpgb8ifSx7ImNoYXIiOiLlhY0ifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiLlr7wifSx7ImNoYXIiOiLoh7QifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLmlbAifSx7ImNoYXIiOiLmja4ifSx7ImNoYXIiOiLkuKIifSx7ImNoYXIiOiLlpLEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlsKQifSx7ImNoYXIiOiLlhbYifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLkuIoifSx7ImNoYXIiOiLnlLUifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLpgqMifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLpmLYifSx7ImNoYXIiOiLmrrUifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLoiq8ifSx7ImNoYXIiOiLniYcifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLmsqEifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLlj5EifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLkupsifSx7ImNoYXIiOiLmtYEifSx7ImNoYXIiOiLmjqcifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpkogifSx7ImNoYXIiOiLlr7kifSx7ImNoYXIiOiJCIn0seyJjaGFyIjoiTCJ9LHsiY2hhciI6IkUifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLoiq8ifSx7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLnoJQifSx7ImNoYXIiOiLnqbYifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLov5gifSx7ImNoYXIiOiLlj6oifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLnmq4ifSx7ImNoYXIiOiLmr5sifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLnu6cifSx7ImNoYXIiOiLnu60ifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLnoJQifSx7ImNoYXIiOiLnqbYifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLkupsifSx7ImNoYXIiOiLov5gifSx7ImNoYXIiOiLpnIAifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLkuIsifSx7ImNoYXIiOiLlip8ifSx7ImNoYXIiOiLlpKsifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLmrKEifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLoiq8ifSx7ImNoYXIiOiLniYcifSx7ImNoYXIiOiLmtYsifSx7ImNoYXIiOiLor5UifSx7ImNoYXIiOiLkuZ8ifSx7ImNoYXIiOiLlkYoifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLmrrUifSx7ImNoYXIiOiLokL0ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLluIwifSx7ImNoYXIiOiLmnJsifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLmnLoifSx7ImNoYXIiOiLkvJoifSx7ImNoYXIiOiLog70ifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLpmYUifSx7ImNoYXIiOiLkvb8ifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLor6UifSx7ImNoYXIiOiLoiq8ifSx7ImNoYXIiOiLniYcifSx7ImNoYXIiOiLlj4IifSx7ImNoYXIiOiLkuI4ifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLpmYUifSx7ImNoYXIiOiLpobkifSx7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLorr4ifSx7ImNoYXIiOiLorqEifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fV0=--></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>注意蓝牙的无线通信其实使用的就是蓝牙的透传模式;对蓝牙的修改使用的命令模式,通过标准的AT指令进行,例如修改蓝牙名等。我这里打一个小问号,通常BLE蓝牙需要进行流控,针对手中目前使用的BLE蓝牙模块是存在流控引脚的,避免状态不对导致的数据丢失,尤其是在上电的那个阶段,在本芯片中没有发现这些流控,针对BLE的芯目前研究的还只是皮毛,要继续的研究这些还需要下功夫,本次的芯片测试也告一段落,希望有机会能实际使用该芯片参与实际项目设计。</p>
<p>版主大佬,会有人找的,加油!</p>
lugl4313820 发表于 2022-9-14 22:42
注意蓝牙的无线通信其实使用的就是蓝牙的透传模式;对蓝牙的修改使用的命令模式,通过标准的AT指令进行,例 ...
<p>真的可以,我们这里就有MCU加蓝牙模块的产品,不过蓝牙模块也是我们自己设计的</p>
页:
[1]