日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rtthread 串口dma接收_rtthread 添加串口 (uart3)

發布時間:2024/3/26 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rtthread 串口dma接收_rtthread 添加串口 (uart3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.查詢uart配置過程

文件路徑: /drivers/board.h

使能RTT uart驅動

2.使能usart3總線

打開 /drivers/board.h

#define BSP_UART3_RX_USING_DMA

#define BSP_USING_UART3

#define BSP_UART1_TX_PIN "PB10"

#define BSP_UART1_RX_PIN "PB11"

3.使能HAL庫相應模塊

打開 /drivers/ stm32f7xx_hal_conf.h

使能 #define HAL_UART_MODULE_ENABLED

4.添加硬件初始化代碼

通過 stm32cubemx工具使能uart2硬件,在一下路徑

\Core\Src\stm32f7xx_hal_msp.c中將HAL_UART_MspInit拷貝到 /drivers/board.c中

void HAL_UART_MspInit(UART_HandleTypeDef*uartHandle)

{

GPIO_InitTypeDef GPIO_InitStruct= {0};if(uartHandle->Instance==USART3)

{/*USART3 clock enable*/__HAL_RCC_USART3_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();/**USART3 GPIO Configuration

PB10 ------> USART3_TX

PB11 ------> USART3_RX*/GPIO_InitStruct.Pin=GPIO_PIN_10;

GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;

GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

GPIO_InitStruct.Pin=GPIO_PIN_11;

GPIO_InitStruct.Mode=GPIO_MODE_INPUT;

GPIO_InitStruct.Pull=GPIO_NOPULL;

HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

}

}

5.驗證

6.測試代碼

#include

#define SAMPLE_UART_NAME "uart3"

/*用于接收消息的信號量*/

static structrt_semaphore rx_sem;staticrt_device_t serial;/*接收數據回調函數*/

staticrt_err_t uart_input(rt_device_t dev, rt_size_t size)

{/*串口接收到數據后產生中斷,調用此回調函數,然后發送接收信號量*/rt_sem_release(&rx_sem);returnRT_EOK;

}/**

* 串口接受線程

* @param parameter*/

static void serial_thread_entry(void *parameter)

{charch;while (1)

{/*從串口讀取一個字節的數據,沒有讀取到則等待接收信號量*/

while (rt_device_read(serial, -1, &ch, 1) != 1)

{/*阻塞等待接收信號量,等到信號量后再次讀取數據*/rt_sem_take(&rx_sem, RT_WAITING_FOREVER);

}/*讀取到的數據通過串口錯位輸出*/ch= ch + 1;

rt_device_write(serial,0, &ch, 1);

}

}static int uart_sample(int argc, char *argv[])

{

rt_err_t ret=RT_EOK;charuart_name[RT_NAME_MAX];char str[] = "hello RT-Thread!\r\n";if (argc == 2)

{

rt_strncpy(uart_name, argv[1], RT_NAME_MAX);

}else{

rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);

}/*查找系統中的串口設備*/serial=rt_device_find(uart_name);if (!serial)

{

rt_kprintf("find %s failed!\n", uart_name);returnRT_ERROR;

}/*初始化信號量*/rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);/*以中斷接收及輪詢發送模式打開串口設備*/rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);/*設置接收回調函數*/rt_device_set_rx_indicate(serial, uart_input);/*發送字符串*/rt_device_write(serial,0, str, (sizeof(str) - 1));/*創建 serial 線程*/rt_thread_t thread= rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);/*創建成功則啟動線程*/

if (thread !=RT_NULL)

{

rt_thread_startup(thread);

}else{

ret=RT_ERROR;

}returnret;

}/*導出到 msh 命令列表中*/MSH_CMD_EXPORT(uart_sample, uart device sample);

總結

以上是生活随笔為你收集整理的rtthread 串口dma接收_rtthread 添加串口 (uart3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。