使用UART配置BLE

学到更多常见问题解答教程

9个帖子/ 0新
最后一篇
Hamiddhosseini
离线
最后一次露面:3个月3天前
加入:2020-05-12 12:04
使用UART配置BLE

你好呀,

我正在尝试使用UART与BLE并行。出于我的项目目的,无附庸术和DSP不适用,不可能做出足够的修改。因此,我决定在与BLE_APP_PERITIELALAL示例中使用示例项目中演示的UART功能。

据说,在导入所需的一些库之后并在BLE示例中启用DMA模式;我跟着这个powccess:

  • 订阅ADC值1时,我想每5秒开始读取数据。
void user_svc1_adc_val_1_cfg_ind_handler(ke_msg_id_t const msgs,struct custs1_val_write_ind const * param,ke_task_id_t const dest_id,ke_task_id_t const src_id){//在中央订阅时生成指示(param-> value [0]){printf_string(UART2,“用户已经订阅了ADC特征!\ n \ r“);sendrecsm_op();}}
  • 我尝试使用不同的中断模式:
ke_msg_id_t timer_used_sendrec_sm __section_zero(“保留_mem_area0”);// @保留内存UART_T * UART = UART2;const int read_char_count = 5;静态char buffer_ble [read_char_count + 1];volatile bool uart_receive_finished = false;volatile uint16_t data_received_cnt = 0;//函数定义void sendrecsm_op(){// blocking_receive_uart();intr_receive_uart();// dma_receive_uart();app_easy_timer(500,UART_CHK_BUFFER_CB); } static void uart_receive_cb(uint16_t length){ data_received_cnt = length; uart_receive_finished = true; } void dma_receive_uart(){ uart_receive_finished = false; data_received_cnt = 0; uart_register_rx_cb(uart, uart_receive_cb); //Time to ask for data! uart_receive(uart, (uint8_t *)buffer_BLE, READ_CHAR_COUNT, UART_OP_DMA); } void uart_chk_buffer_cb() { arch_printf("\n\rChecking the buffer!\n\r"); if (uart_receive_finished){ buffer_BLE[READ_CHAR_COUNT] = 0; // make it a null terminated string printf_string(uart,buffer_BLE); } } void intr_receive_uart(){ uart_receive_finished = false; data_received_cnt = 0; uart_register_rx_cb(uart, uart_receive_cb); //Time to ask for data! arch_printf("UART is in Interrupt mode!\n\r"); arch_printf("Please input the data!"); uart_receive(uart, (uint8_t *)buffer_BLE, READ_CHAR_COUNT, UART_OP_INTR); } void blocking_receive_uart(){ printf_string(uart,"UART is in Blocking mode!\n\r"); printf_string(uart,"Please input the data!"); uart_receive(uart, (uint8_t *)buffer_BLE, READ_CHAR_COUNT, UART_OP_BLOCKING); buffer_BLE[READ_CHAR_COUNT] = 0; // make it a null terminated string printf_string(uart,buffer_BLE); }

在阻止收到的情况下,我不使用计时器。但是,如果我不立即输入数据,则计划崩溃“而(!Uart_data_ready_getf(Uart_id));”命令in.“UART_READ_BYTE()”

如果中断接收,我使用所述计时器。但是,该程序仅运行一次。换句话说,它只打印“检查缓冲区!”无论我会做什么,一切都会冻结。

  • 如果我坚持原始代码和使用“虽然(!recept_uart_finished);”由于代码相同的代码,程序管理程序将崩溃。

我想知道,我能做什么来解决这些问题?是否有一些我没有为UART配置的东西?有一个更好的方法吗?(除了使用无附带或DSP外,因为它们看起来非常难以修改)

关键词:
设备:
PM_DIALOG.
离线
最后一次露面:3小时48分钟前
职员
加入:2018-02-08 11:03
嗨Hamiddhosseini,

嗨Hamiddhosseini,

你能澄清你想要完成的事情吗?如果我理解正确,你只需要打印uart的消息?我的理解是否正确?您是否尝试使用Arch_PRNTF()API打印您的日期?

您使用的是哪个BLE示例?请注意如果您使用的任何可用睡眠模式,则关闭所有外设域(包括UART)。这意味着您不能在睡眠模式下具有任何UART活动。

谢谢,PM_DIALOG.

孙梦君
离线
最后一次露面:3天前1周
加入:2020-03-03 02:40
我有同样的问题和

我有同样的问题,并定义了arch_ leep_关。

在DA14585,SDK6.0.12中,BLE_APP_PERITERAL。

Hamiddhosseini
离线
最后一次露面:3个月3天前
加入:2020-05-12 12:04
你好呀,

你好呀,

感谢您的回复,我在Ble_App_Perizalal示例上基于我的工作,我试图在这个例子中添加发送和接收数据通过UART。

现在,我已经设法解决了这个问题。现在我理解在此示例中不可能使用拦截模式。但是,我在编写中断和DMA模式时犯了一个小错误。

孙梦君
离线
最后一次露面:3天前1周
加入:2020-03-03 02:40
你是如何解决这个问题的

你是如何解决这个问题的?

Hamiddhosseini
离线
最后一次露面:3个月3天前
加入:2020-05-12 12:04
所以,我的问题是

所以,我的问题是App_easy_timer。我忘记在回调中再次调用此函数。因此,它只运行一次。如果您认为您有同样的问题,可以检查在SDK中使用此功能的示例之一。

PM_DIALOG.
离线
最后一次露面:3小时48分钟前
职员
加入:2018-02-08 11:03
你好呀,

你好呀,

我建议使用最新的SDK版本,该版本是SDK6.0.14。你能澄清你想要完成的事情,这样我都可以了解我如何帮助你吗?

谢谢,PM_DIALOG.

Hamiddhosseini
离线
最后一次露面:3个月3天前
加入:2020-05-12 12:04
谢谢,我的问题得到解决

谢谢,我的问题现在已经解决了。如果需要澄清,我不知道这个问题的哪个部分模糊不清,请告诉我。

孙梦君
离线
最后一次露面:3天前1周
加入:2020-03-03 02:40
非常感谢你的

非常感谢您的回复。我会尝试这种方法。