mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-09 22:38:54 +00:00
[doc] update readme and rst
This commit is contained in:
parent
3f480f087b
commit
4cdef3164f
65 changed files with 2435 additions and 640 deletions
|
@ -1,121 +0,0 @@
|
|||
ADC - 电压检测
|
||||
====================
|
||||
|
||||
本 demo 主要介绍基于 ADC 的电压检测功能,使用 ADC 检测 CH8 输入的电压值。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
将 ADC CH8 对应的 GPIO 口与 3.3 V 引脚相连。不同芯片 ADC CH8 对应的 GPIO 口如下表所示:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+==========+===========+===========================+
|
||||
| ADC CH8 | BL702 | GPIO 18 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 1 |
|
||||
+----------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
更详细的代码请参考 ``examples/peripherals/adc/adc_oneshot_1ch``
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 adc 外设,并且初始化 adc 的时钟
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_adc_gpio_init();
|
||||
|
||||
- 配置相关引脚为 `ADC` 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
adc = bflb_device_get_by_name("adc");
|
||||
|
||||
struct bflb_adc_config_s cfg;
|
||||
|
||||
cfg.clk_div = ADC_CLK_DIV_32;
|
||||
cfg.scan_conv_mode = false;
|
||||
cfg.continuous_conv_mode = false;
|
||||
cfg.differential_mode = false;
|
||||
cfg.resolution = ADC_RESOLUTION_16B;
|
||||
cfg.vref = ADC_VREF_3P2V;
|
||||
|
||||
bflb_adc_init(adc, &cfg);
|
||||
|
||||
- 获取 `adc` 句柄,并初始化 adc
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
struct bflb_adc_channel_s chan;
|
||||
|
||||
chan.pos_chan = ADC_CHANNEL_8;
|
||||
chan.neg_chan = ADC_CHANNEL_GND;
|
||||
|
||||
bflb_adc_channel_config(adc, &chan, 1);
|
||||
|
||||
- 配置 adc 通道信息,当前使用了一对通道
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
for (uint32_t i = 0; i < 10; i++) {
|
||||
bflb_adc_start_conversion(adc);
|
||||
|
||||
while (bflb_adc_get_count(adc) == 0) {
|
||||
}
|
||||
struct bflb_adc_result_s result;
|
||||
uint32_t raw_data = bflb_adc_read_raw(adc);
|
||||
printf("raw data:%08x\r\n", raw_data);
|
||||
bflb_adc_parse_result(adc, &raw_data, &result, 1);
|
||||
printf("pos chan %d,%d mv \r\n", result.pos_chan, result.millivolt);
|
||||
bflb_adc_stop_conversion(adc);
|
||||
bflb_mtimer_delay_ms(100);
|
||||
}
|
||||
|
||||
- 调用 ``bflb_adc_start_conversion(adc)`` 启用 adc 的转换
|
||||
- 调用 ``bflb_adc_read_raw(adc)`` 读取一次 adc 的转换值
|
||||
- 调用 ``bflb_adc_parse_result(adc, &raw_data, &result, 1)`` 对 adc 的转换结果进行解析,解析的值保存到 ``result`` 结构体中
|
||||
- 调用 ``bflb_adc_stop_conversion(adc)`` 停止 adc 转换
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
.. code-block:: bash
|
||||
:linenos:
|
||||
|
||||
$ cd <sdk_path>/examples/peripherals/adc/adc_oneshot_1ch
|
||||
$ make CHIP=blxxx BOARD=blxxx_dk
|
||||
|
||||
.. note:: blxxx为所使用的芯片型号,以bl616为例,编译命令为:make CHIP=bl616 BOARD=bl616_dk
|
||||
|
||||
- **烧录**
|
||||
|
||||
详见 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
将 ADC_CH8 对应的 GPIO口与 3.3V 相连,打印的信息如下:
|
||||
|
||||
.. figure:: img/adc_log.png
|
||||
:align: center
|
||||
|
||||
log 信息
|
||||
|
95
docs/source/samples/peripherals/adc/adc_poll.rst
Normal file
95
docs/source/samples/peripherals/adc/adc_poll.rst
Normal file
|
@ -0,0 +1,95 @@
|
|||
ADC - poll
|
||||
====================
|
||||
|
||||
本 demo 主要演示 adc poll 单端模式下读取电压值。默认扫描通道 0 ~ 通道10。 **需要注意,有些芯片不一定支持全部通道**。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
本 demo 使用到的 gpio 参考 ``board_adc_gpio_init`` 。
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
更详细的代码请参考 **examples/peripherals/adc/adc_poll**
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 ADC IP 时钟,并选择 ADC 时钟源和分频。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_adc_gpio_init();
|
||||
|
||||
- 配置相关引脚为 `ADC` 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
adc = bflb_device_get_by_name("adc");
|
||||
|
||||
/* adc clock = XCLK / 2 / 32 */
|
||||
struct bflb_adc_config_s cfg;
|
||||
cfg.clk_div = ADC_CLK_DIV_32;
|
||||
cfg.scan_conv_mode = true;
|
||||
cfg.continuous_conv_mode = false;
|
||||
cfg.differential_mode = false;
|
||||
cfg.resolution = ADC_RESOLUTION_16B;
|
||||
cfg.vref = ADC_VREF_3P2V;
|
||||
|
||||
bflb_adc_init(adc, &cfg);
|
||||
|
||||
- 获取 `adc` 句柄,并初始化 adc 配置,设置 adc 采样频率为 500K
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
bflb_adc_channel_config(adc, chan, TEST_ADC_CHANNELS);
|
||||
|
||||
- 配置 adc 通道信息,使用的对数根据 `TEST_ADC_CHANNELS` 可配,默认开启通道 0 ~ 10,根据 ``board_adc_gpio_init`` 需要选择性关闭其他通道。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
for (uint32_t i = 0; i < TEST_COUNT; i++) {
|
||||
bflb_adc_start_conversion(adc);
|
||||
|
||||
while (bflb_adc_get_count(adc) < TEST_ADC_CHANNELS) {
|
||||
bflb_mtimer_delay_ms(1);
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < TEST_ADC_CHANNELS; j++) {
|
||||
struct bflb_adc_result_s result;
|
||||
uint32_t raw_data = bflb_adc_read_raw(adc);
|
||||
printf("raw data:%08x\r\n", raw_data);
|
||||
bflb_adc_parse_result(adc, &raw_data, &result, 1);
|
||||
printf("pos chan %d,%d mv \r\n", result.pos_chan, result.millivolt);
|
||||
}
|
||||
|
||||
bflb_adc_stop_conversion(adc);
|
||||
bflb_mtimer_delay_ms(100);
|
||||
}
|
||||
|
||||
- 调用 ``bflb_adc_start_conversion(adc)`` 启用 adc 的转换
|
||||
- 调用 ``bflb_adc_get_count(adc)`` 读取转换完成的个数
|
||||
- 调用 ``bflb_adc_read_raw(adc)`` 读取一次 adc 的转换值
|
||||
- 调用 ``bflb_adc_parse_result(adc, &raw_data, &result, 1)`` 对 adc 的转换结果进行解析,解析的值保存到 ``result`` 结构体中
|
||||
- 调用 ``bflb_adc_stop_conversion(adc)`` 停止 adc 转换
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
参考 :ref:`linux_cmd` 或者 :ref:`windows_cmd`
|
||||
|
||||
- **烧录**
|
||||
|
||||
参考 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
|
@ -1,8 +1,8 @@
|
|||
=======================
|
||||
ADC 示例
|
||||
=======================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ADC - 电压检测 <adc_oneshot_1ch>
|
||||
=====
|
||||
ADC
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ADC - poll <adc_poll>
|
|
@ -1,89 +1,83 @@
|
|||
DAC - 正弦波
|
||||
====================
|
||||
|
||||
本 demo 主要介绍基于 DAC 生成正弦波。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
不同芯片 DAC Channel A 对应的 GPIO 口如下表所示:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+================+===========+===========================+
|
||||
| DAC Channel A | BL702 | GPIO 11 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 3 |
|
||||
+----------------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
更详细的代码请参考 ``examples/peripherals/dac/dac_polling``
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 dac 外设
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_dac_gpio_init();
|
||||
|
||||
- 配置相关引脚为 `DAC` 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
dac = bflb_device_get_by_name("dac");
|
||||
|
||||
bflb_dac_init(dac, DAC_SAMPLING_FREQ_32K);
|
||||
|
||||
- 获取 `dac` 句柄,并初始化 dac,时钟配置为 32K
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
bflb_dac_channel_enable(dac, DAC_CHANNEL_A);
|
||||
|
||||
- 配置 dac 通道信息,当前使用的 A 通道
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
for (uint16_t i = 0; i < sizeof(SIN_LIST) / sizeof(uint16_t); i++) {
|
||||
bflb_dac_set_value(dac, DAC_CHANNEL_A, SIN_LIST[i]);
|
||||
bflb_mtimer_delay_us(100);
|
||||
}
|
||||
|
||||
- 调用 ``bflb_dac_set_value(dac, DAC_CHANNEL_A, SIN_LIST[i])`` ,将需要转换的数据通过通道 A 输出
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
.. code-block:: bash
|
||||
:linenos:
|
||||
|
||||
$ cd <sdk_path>/examples/peripherals/dac/dac_polling
|
||||
$ make CHIP=blxxx BOARD=blxxx_dk
|
||||
|
||||
.. note:: blxxx为所使用的芯片型号,以bl616为例,编译命令为:make CHIP=bl616 BOARD=bl616_dk
|
||||
|
||||
- **烧录**
|
||||
|
||||
详见 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
DAC Channel A 对应的 GPIO 输出正弦波。
|
||||
DAC - poll
|
||||
====================
|
||||
|
||||
本 demo 主要介绍基于 DAC 轮询模式生成正弦波。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
本 demo 使用到的 gpio 如下表:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+================+===========+===========================+
|
||||
| DAC Channel A | BL702 | GPIO 11 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 3 |
|
||||
+----------------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
更详细的代码请参考 **examples/peripherals/dac/dac_polling**
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 DAC IP 时钟,并选择 DAC 时钟源和分频。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_dac_gpio_init();
|
||||
|
||||
- 配置相关引脚为 `DAC` 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
dac = bflb_device_get_by_name("dac");
|
||||
|
||||
bflb_dac_init(dac, DAC_SAMPLING_FREQ_32K);
|
||||
|
||||
- 获取 `dac` 句柄,并初始化 dac 频率为 32K
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
bflb_dac_channel_enable(dac, DAC_CHANNEL_A);
|
||||
|
||||
- 配置 dac 通道信息,当前使用的 A 通道
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
for (uint16_t i = 0; i < sizeof(SIN_LIST) / sizeof(uint16_t); i++) {
|
||||
bflb_dac_set_value(dac, DAC_CHANNEL_A, SIN_LIST[i]);
|
||||
bflb_mtimer_delay_us(100);
|
||||
}
|
||||
|
||||
- 调用 ``bflb_dac_set_value(dac, DAC_CHANNEL_A, SIN_LIST[i])`` ,将需要转换的数据通过通道 A 输出
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
参考 :ref:`linux_cmd` 或者 :ref:`windows_cmd`
|
||||
|
||||
- **烧录**
|
||||
|
||||
参考 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
DAC Channel A 对应的 GPIO 输出正弦波。
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
=======================
|
||||
DAC 示例
|
||||
=======================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
DAC - 生成正弦波 <dac_polling>
|
||||
====
|
||||
DAC
|
||||
====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
DAC - poll <dac_polling>
|
|
@ -8,5 +8,5 @@ Peripherals
|
|||
:maxdepth: 1
|
||||
|
||||
ADC <adc/index>
|
||||
DAC <dac/index>
|
||||
UART <uart/index>
|
||||
DAC <dac/index>
|
|
@ -1,8 +1,9 @@
|
|||
=======================
|
||||
UART 轮询收发数据
|
||||
=======================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
UART - poll <uart_poll>
|
||||
======
|
||||
UART
|
||||
======
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
UART - poll <uart_poll>
|
||||
UART - dma <uart_dma>
|
160
docs/source/samples/peripherals/uart/uart_dma.rst
Normal file
160
docs/source/samples/peripherals/uart/uart_dma.rst
Normal file
|
@ -0,0 +1,160 @@
|
|||
UART - dma
|
||||
====================
|
||||
|
||||
本 demo 主要演示 UART dma 模式收发功能。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
- 芯片 UART TX 引脚连接 USB2TTL 模块 RX
|
||||
- 芯片 UART RX 引脚连接 USB2TTL 模块 TX
|
||||
|
||||
本 demo 使用到的 gpio 如下表:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+==========+===========+===========================+
|
||||
| UART1_TX | BL702 | GPIO 18 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 23 |
|
||||
+----------+-----------+---------------------------+
|
||||
| UART1_RX | BL702 | GPIO 19 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 24 |
|
||||
+----------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
具体软件代码见 **examples/peripherals/uart/uart_podma**
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 UART IP 时钟,并选择 UART 时钟源和分频。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_uartx_gpio_init();
|
||||
|
||||
- 配置相关引脚为 ``UARTx TX`` 、 ``UARTx RX`` 功能,默认 demo 使用 UART1 外设。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
uartx = bflb_device_get_by_name(DEFAULT_TEST_UART);
|
||||
|
||||
struct bflb_uart_config_s cfg;
|
||||
|
||||
cfg.baudrate = 2000000;
|
||||
cfg.data_bits = UART_DATA_BITS_8;
|
||||
cfg.stop_bits = UART_STOP_BITS_1;
|
||||
cfg.parity = UART_PARITY_NONE;
|
||||
cfg.flow_ctrl = 0;
|
||||
cfg.tx_fifo_threshold = 7;
|
||||
cfg.rx_fifo_threshold = 7;
|
||||
bflb_uart_init(uartx, &cfg);
|
||||
|
||||
- 获取 `DEFAULT_TEST_UART` 句柄,并初始化 UART
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
bflb_uart_link_txdma(uartx, true);
|
||||
bflb_uart_link_rxdma(uartx, true);
|
||||
|
||||
- 使能 uart tx、rx dma 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
struct bflb_dma_channel_config_s config;
|
||||
|
||||
config.direction = DMA_MEMORY_TO_PERIPH;
|
||||
config.src_req = DMA_REQUEST_NONE;
|
||||
config.dst_req = DEFAULT_TEST_UART_DMA_TX_REQUEST;
|
||||
config.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
|
||||
config.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
|
||||
config.src_burst_count = DMA_BURST_INCR1;
|
||||
config.dst_burst_count = DMA_BURST_INCR1;
|
||||
config.src_width = DMA_DATA_WIDTH_8BIT;
|
||||
config.dst_width = DMA_DATA_WIDTH_8BIT;
|
||||
bflb_dma_channel_init(dma0_ch0, &config);
|
||||
|
||||
struct bflb_dma_channel_config_s rxconfig;
|
||||
|
||||
rxconfig.direction = DMA_PERIPH_TO_MEMORY;
|
||||
rxconfig.src_req = DEFAULT_TEST_UART_DMA_RX_REQUEST;
|
||||
rxconfig.dst_req = DMA_REQUEST_NONE;
|
||||
rxconfig.src_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
|
||||
rxconfig.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
|
||||
rxconfig.src_burst_count = DMA_BURST_INCR1;
|
||||
rxconfig.dst_burst_count = DMA_BURST_INCR1;
|
||||
rxconfig.src_width = DMA_DATA_WIDTH_8BIT;
|
||||
rxconfig.dst_width = DMA_DATA_WIDTH_8BIT;
|
||||
bflb_dma_channel_init(dma0_ch1, &rxconfig);
|
||||
|
||||
bflb_dma_channel_irq_attach(dma0_ch0, dma0_ch0_isr, NULL);
|
||||
bflb_dma_channel_irq_attach(dma0_ch1, dma0_ch1_isr, NULL);
|
||||
|
||||
- 配置 `DMA CH0` 为 `UARTx TX` , `DMA CH1` 为 `UARTx RX` .
|
||||
- 注册 dma 通道中断
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
struct bflb_dma_channel_lli_pool_s tx_llipool[20]; /* max trasnfer size 4064 * 20 */
|
||||
struct bflb_dma_channel_lli_transfer_s tx_transfers[3];
|
||||
|
||||
tx_transfers[0].src_addr = (uint32_t)src_buffer;
|
||||
tx_transfers[0].dst_addr = (uint32_t)DEFAULT_TEST_UART_DMA_TDR;
|
||||
tx_transfers[0].nbytes = 4100;
|
||||
|
||||
tx_transfers[1].src_addr = (uint32_t)src2_buffer;
|
||||
tx_transfers[1].dst_addr = (uint32_t)DEFAULT_TEST_UART_DMA_TDR;
|
||||
tx_transfers[1].nbytes = 4100;
|
||||
|
||||
tx_transfers[2].src_addr = (uint32_t)src3_buffer;
|
||||
tx_transfers[2].dst_addr = (uint32_t)DEFAULT_TEST_UART_DMA_TDR;
|
||||
tx_transfers[2].nbytes = 4100;
|
||||
|
||||
struct bflb_dma_channel_lli_pool_s rx_llipool[20];
|
||||
struct bflb_dma_channel_lli_transfer_s rx_transfers[1];
|
||||
rx_transfers[0].src_addr = (uint32_t)DEFAULT_TEST_UART_DMA_RDR;
|
||||
rx_transfers[0].dst_addr = (uint32_t)receive_buffer;
|
||||
rx_transfers[0].nbytes = 50;
|
||||
|
||||
bflb_dma_channel_lli_reload(dma0_ch0, tx_llipool, 20, tx_transfers, 3);
|
||||
bflb_dma_channel_lli_reload(dma0_ch1, rx_llipool, 20, rx_transfers, 1);
|
||||
bflb_dma_channel_start(dma0_ch0);
|
||||
bflb_dma_channel_start(dma0_ch1);
|
||||
|
||||
- 分配一块 lli 内存池,个数为20,最多可以传输 4094 * 20 字节
|
||||
- 配置三块不连续的内存进行传输
|
||||
- 调用 ``bflb_dma_channel_lli_reload`` 初始化
|
||||
- 调用 ``bflb_dma_channel_start`` 启动传输
|
||||
- 等待传输完成并进入中断
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
参考 :ref:`linux_cmd` 或者 :ref:`windows_cmd`
|
||||
|
||||
- **烧录**
|
||||
|
||||
参考 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
|
|
@ -1,102 +1,99 @@
|
|||
UART - 轮询收发数据
|
||||
====================
|
||||
|
||||
本 demo 主要介绍 UART1 外设的轮询发送和轮询接收,实现自发自收功能。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
将 UART1 TX 和 RX 引脚分别与 USB2TTL 模块 RX 和 TX 相连。本 demo 中不同芯片 UART1 引脚对应的 GPIO 口如下表所示:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+==========+===========+===========================+
|
||||
| UART1_TX | BL702 | GPIO 18 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 23 |
|
||||
+----------+-----------+---------------------------+
|
||||
| UART1_RX | BL702 | GPIO 19 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 24 |
|
||||
+----------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
具体软件代码见 ``examples/peripherals/uart/uart_poll``
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 uart1 外设,并且初始化 uart1 的时钟
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_uart1_gpio_init();
|
||||
|
||||
- 配置相关引脚为 ``UART1 TX`` 、 ``UART1 RX`` 功能
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
uart1 = bflb_device_get_by_name("uart1");
|
||||
|
||||
struct bflb_uart_config_s cfg;
|
||||
|
||||
cfg.baudrate = 2000000;
|
||||
cfg.data_bits = UART_DATA_BITS_8;
|
||||
cfg.stop_bits = UART_STOP_BITS_1;
|
||||
cfg.parity = UART_PARITY_NONE;
|
||||
cfg.flow_ctrl = 0;
|
||||
cfg.tx_fifo_threshold = 7;
|
||||
cfg.rx_fifo_threshold = 7;
|
||||
bflb_uart_init(uart1, &cfg);
|
||||
|
||||
- 获取 `uart1` 句柄,并初始化 UART1
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
int ch;
|
||||
while (1) {
|
||||
ch = bflb_uart_getchar(uart1);
|
||||
if (ch != -1) {
|
||||
bflb_uart_putchar(uart1, ch);
|
||||
}
|
||||
}
|
||||
|
||||
- 调用 ``bflb_uart_getchar(uart1)`` ,从 UART1 RX FIFO 中读取 USB2TTL 模块发送给 UART1 的数据,保存在 ch 中,如果没有数据则返回 -1
|
||||
- 调用 ``bflb_uart_putchar(uart1, ch)`` 将数据 ch 写入 UART1 TX FIFO 中,并发送给 USB2TTL 模块
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
.. code-block:: bash
|
||||
:linenos:
|
||||
|
||||
$ cd <sdk_path>/examples/peripherals/uart/uart_poll
|
||||
$ make CHIP=blxxx BOARD=blxxx_dk
|
||||
|
||||
.. note:: blxxx为所使用的芯片型号,以bl616为例,编译命令为:make CHIP=bl616 BOARD=bl616_dk
|
||||
|
||||
- **烧录**
|
||||
|
||||
详见 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
将 UART1 TX, RX, GND 引脚分别与 USB2TTL 模块 RX, TX, GND 相连,按下 reset 按键。
|
||||
使用串口给 UART1 发送 ``0123456789`` ,USB2TTL 模块能接收到同样的数据。
|
||||
|
||||
|
||||
UART - poll
|
||||
====================
|
||||
|
||||
本 demo 主要演示 UART 轮询模式收发功能。
|
||||
|
||||
硬件连接
|
||||
-----------------------------
|
||||
|
||||
- 芯片 UART TX 引脚连接 USB2TTL 模块 RX
|
||||
- 芯片 UART RX 引脚连接 USB2TTL 模块 TX
|
||||
|
||||
本 demo 使用到的 gpio 如下表:
|
||||
|
||||
.. table:: GPIO 口
|
||||
:widths: 30, 30, 40
|
||||
:width: 80%
|
||||
:align: center
|
||||
|
||||
+----------+-----------+---------------------------+
|
||||
| 名称 | 芯片型号 | GPIO |
|
||||
+==========+===========+===========================+
|
||||
| UART1_TX | BL702 | GPIO 18 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 23 |
|
||||
+----------+-----------+---------------------------+
|
||||
| UART1_RX | BL702 | GPIO 19 |
|
||||
+ +-----------+---------------------------+
|
||||
| | BL616 | GPIO 24 |
|
||||
+----------+-----------+---------------------------+
|
||||
|
||||
软件实现
|
||||
-----------------------------
|
||||
|
||||
具体软件代码见 **examples/peripherals/uart/uart_poll**
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_init();
|
||||
|
||||
- ``board_init`` 中会开启 UART IP 时钟,并选择 UART 时钟源和分频。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
board_uartx_gpio_init();
|
||||
|
||||
- 配置相关引脚为 ``UARTx TX`` 、 ``UARTx RX`` 功能,默认 demo 使用 UART1 外设。
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
uartx = bflb_device_get_by_name(DEFAULT_TEST_UART);
|
||||
|
||||
struct bflb_uart_config_s cfg;
|
||||
|
||||
cfg.baudrate = 2000000;
|
||||
cfg.data_bits = UART_DATA_BITS_8;
|
||||
cfg.stop_bits = UART_STOP_BITS_1;
|
||||
cfg.parity = UART_PARITY_NONE;
|
||||
cfg.flow_ctrl = 0;
|
||||
cfg.tx_fifo_threshold = 7;
|
||||
cfg.rx_fifo_threshold = 7;
|
||||
bflb_uart_init(uartx, &cfg);
|
||||
|
||||
- 获取 `DEFAULT_TEST_UART` 句柄,并初始化 UART
|
||||
|
||||
.. code-block:: C
|
||||
:linenos:
|
||||
|
||||
int ch;
|
||||
while (1) {
|
||||
ch = bflb_uart_getchar(uartx);
|
||||
if (ch != -1) {
|
||||
bflb_uart_putchar(uartx, ch);
|
||||
}
|
||||
}
|
||||
|
||||
- 调用 ``bflb_uart_getchar`` 从 uart rx fifo 中读取数据,如果返回 -1,表示没有数据
|
||||
- 调用 ``bflb_uart_putchar`` 将数据 `ch` 填充到 uart tx fifo 中
|
||||
|
||||
编译和烧录
|
||||
-----------------------------
|
||||
|
||||
- **命令行编译**
|
||||
|
||||
参考 :ref:`linux_cmd` 或者 :ref:`windows_cmd`
|
||||
|
||||
- **烧录**
|
||||
|
||||
参考 :ref:`bl_dev_cube`
|
||||
|
||||
实验现象
|
||||
-----------------------------
|
||||
|
||||
将 UART1 TX, RX, GND 引脚分别与 USB2TTL 模块 RX, TX, GND 相连,按下 reset 按键。
|
||||
使用串口给 UART1 发送 ``0123456789`` ,USB2TTL 模块能接收到同样的数据。
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue