-
凌欧LSK45芯片的DMA相关问题,求助大佬
用串口助手发送8个字节的数据,在接收中断里面通过DMA搬运数据。但接收的数据有问题,第一个字节的数据搬运2次,最后一个字节的数据丢失。void uart_init(void) { UART_InitTypeDef uart0_config; GPIO_InitTypeDef GPIO_InitStruct; // DMA_InitTypeDef uart0_dma_config; UART_StructInit(&uart0_config); // 这些是默认配置,简单的应用只配置波特率即可 // uart1_config.DUPLEX = DISABLE; // 半双工模式使能,tx_data // uart1_config.MD_EN = DISABLE; // Multi-drop 使能 // uart1_config.CK_EN = DISABLE; // 数据校验使能 // uart1_config.CK_TYPE = 0; // 奇偶校验配置 0:偶校验(EVEN);1: 奇校验(ODD) // uart1_config.BIT_ORDER = 0; // 数据发送顺序配置 0:LSB;1:MSB // uart1_config.STOP_LEN = 0; // 停止位长度配置 0:1-Bit;1:2-Bit // uart1_config.BYTE_LEN = 0; // 数据长度配置 0:8-Bit;1:9-Bit // uart1_config.ADR = 0; // 多机通讯时的从机地址 // uart1_config.RX_DONE = DISABLE; // 接收完成 DMA 请求使能 // uart1_config.TX_BUF_EMPTY = DISABLE; // 发送缓冲区空 DMA 请求使能 // uart1_config.TXD_INV = DISABLE; // TXD 输出极性取反 // uart1_config.RXD_INV = DISABLE; // RXD 输入极性取反 // uart0_config.TX_DONE = ENABLE; // 发送完成 DMA 请求使能 uart0_config.RX_DONE = ENABLE; uart0_config.TX_BUF_EMPTY = ENABLE; // 发送缓冲区空 DMA 请求使能 uart0_config.IE = UART_IF_SendOver | UART_IF_RcvOver|UART_IF_SendBufEmpty; // 中断配置 uart0_config.BAUDRATE = 115200; // 波特率 UART_Init(UART0, &uart0_config); /*UART0_485的GPIO配置*/ //uart0_485 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15; GPIO_Init(GPIO0, &GPIO_InitStruct); GPIO0_PDO |= BIT15; //写1 /* P0.14-RX0, UART0 */ GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14 ; GPIO_Init(GPIO0, &GPIO_InitStruct); /*P1.0-TX0 UART0 */ GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIO1, &GPIO_InitStruct); GPIO_PinAFConfig(GPIO1, GPIO_PinSource_0, GPIO_AF_UART); GPIO_PinAFConfig(GPIO0, GPIO_PinSource_14, GPIO_AF_UART); /*开启UART的中断*/ NVIC_EnableIRQ(UART0_IRQn); NVIC_SetPriority(UART0_IRQn, 1); } /*DMA接收来自外设的数据*/ void uart0_dma_485_recvdata(u8 *t, u16 len) { DMA_InitTypeDef uart0_dma_config; // GPIO0_PDO &= ~BIT15; uart0_dma_config.DMA_Channel_EN = ENABLE; /* DMA 通道使能*/ uart0_dma_config.DMA_IRQ_EN = ENABLE; /* DMA 中断使能 */ uart0_dma_config.DMA_RMODE = ENABLE; /* 多轮传输使能 */ uart0_dma_config.DMA_CIRC = DISABLE; /* 循环模式使能 */ uart0_dma_config.DMA_SINC = DISABLE; /* 源地址递增使能 */ uart0_dma_config.DMA_DINC = ENABLE; /* 目的地址递增使能 */ uart0_dma_config.DMA_SBTW = 0; /* 源地址访问位宽, 0:byte, 1:half-word, 2:word */ uart0_dma_config.DMA_DBTW = 0; /* 目的地址访问位宽, 0:byte, 1:half-word, 2:word */ uart0_dma_config.DMA_REQ_EN = DMA_REQ_UART0_RX; /* 通道 x 硬件 DMA 请求使能,高有效 */ uart0_dma_config.DMA_TIMES = 8; /* DMA 通道 x 数据搬运次数 */ uart0_dma_config.DMA_SADR = (u32)&UART0_BUFF; /* DMA 通道 x 源地址 */ uart0_dma_config.DMA_DADR = (u32)t; /* DMA 通道 x 目的地址 */ DMA_Init(DMA_CH0, &uart0_dma_config); DMA_Trigger(DMA_CH0); //开始一次DMA传输 } void UART0_IRQHandler(void) { if (UART_GetIRQFlag(UART0, UART_IF_SendOver)) /*发送完成中断*/ { UART_ClearIRQFlag(UART0, UART_IF_SendOver); // GPIO_ResetBits(GPIO0, GPIO_Pin_15); } if (UART_GetIRQFlag(UART0, UART_IF_RcvOver)) /*接收完成中断*/ { UART_ClearIRQFlag(UART0, UART_IF_RcvOver); uart0_dma_485_recvdata(ModbusSlave_RX_TempBuff, 8); } } [img]data:image/png;base64,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[/img] [img]data:image/png;base64,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[/img]
532浏览量 1回复量 关注量 -
printf命令报错采
用AT32_Work_Bench创建工程项目,设置了usart1,在程序中printf命令编译通不过?是否还需要之间什么辅助命令或宏代码? 谢谢
493浏览量 4回复量 关注量 -
关于GD32F103VGT6无法使用串口3 的问题咨询
[i=s] 本帖最后由 tyw 于 2024-10-23 11:35 编辑 [/i] 首先描述一下现象:翻译 [align=left]搜索[/align][align=left]复制[/align] 在硬件上使用了PC10(TXD)和PC11(RXD)两个引脚,这两个引脚是可以使用USART3 以及UART3的,目前可以正常使用USART2进行数据收发的工作,但是无法使用UART3进行数据收发,仿真器连接的时候可以看到UART3的寄存器可以正常的初始化且配置正确,说明UART3的时钟和引脚设置应该是没有问题的,也可以正常进入串口发送的函数,但是数据传输到发送函数后就没法正常传输出来,这个问题很奇怪,不知道大家是否遇到,下面是串口3的初始化的代码。 硬件原理图如下: [img]https://bbs.21ic.com/data/attachment/album/202410/23/094325qwa5hr7a3hxhg7ao.png[/img] 相关的代码如下: [attach]2307392[/attach] [url=https://bbs.21ic.com/data/attachment/album/202410/23/094209e8zdbqhtykkphkq6.png][img]https://bbs.21ic.com/data/attachment/album/202410/23/094209e8zdbqhtykkphkq6.png[/img][/url] 请问大家有有没有遇到相同的情况?
1648浏览量 2回复量 关注量 -
CH582F RF 问题
我想要移植Nimble到CH582上,但是Freertos的例程里面说ble不建议和freertos共存。我想要单独使用不跑循环的RF相关接口,请问有没有相关教程或者方法?
4665浏览量 11回复量 关注量 -
变量不用计算就可以自增吗?
下边是航顺HK32F030MF4P6的官方基本定时器例程,看到里边定义了一个time变量,但是没看到有计算过程(在整个工程中其他文件中也没有找到time变量),请问变量不计算怎么可以自增?下附部分代码: [backcolor=rgb(255, 255, 255)][font=Consolas, "][color=#008000]/**[/color] [color=#008000] ******************************************************************************[/color] [color=#008000] * [/color][color=#0000ff]@file[/color][color=#008000] main.c[/color] [color=#008000] * [/color][color=#0000ff]@author[/color][color=#008000] Alexander[/color] [color=#008000] * [/color][color=#0000ff]@version[/color][color=#008000] V1.0[/color] [color=#008000] * [/color][color=#0000ff]@date[/color][color=#008000] 2022-xx-xx[/color] [color=#008000] * [/color][color=#0000ff]@brief[/color][color=#008000] 基本定时器[/color] [color=#008000] ******************************************************************************[/color] [color=#008000] * [/color][color=#0000ff]@attention[/color] [color=#008000] *[/color] [color=#008000] * 实验平台:HK32F030M开发板[/color] [color=#008000] * 论坛 :https://bbs.21ic.com/iclist-1010-1.html[/color] [color=#008000] *[/color] [color=#008000] ******************************************************************************[/color] [color=#008000] */[/color] [color=#af00db]#include[/color][color=#0000ff] [/color][color=#a31515]"hk32f030m.h"[/color] [color=#af00db]#include[/color][color=#0000ff] [/color][color=#a31515]"bsp_led.h"[/color] [color=#af00db]#include[/color][color=#0000ff] [/color][color=#a31515]"bsp_TimBase.h"[/color] [color=#0000ff]volatile[/color] [color=#267f99]uint32_t[/color] [color=#001080]time[/color] = [color=#098658]0[/color];[color=#008000] // ms 计时变量[/color] [color=#008000]/**[/color] [color=#008000] * [/color][color=#0000ff]@brief[/color][color=#008000] 主函数[/color] [color=#008000] * [/color][color=#0000ff]@param[/color][color=#008000] [/color][color=#001080]无[/color] [color=#008000] * [/color][color=#0000ff]@retval[/color][color=#008000] 无[/color] [color=#008000] */[/color] [color=#0000ff]int[/color] [color=#795e26]main[/color]([color=#0000ff]void[/color]) { [color=#008000] /* LED 端口初始化 */[/color] [color=#795e26]LED_GPIO_Config[/color](); [color=#795e26]BASIC_TIM_Init[/color](); [color=#af00db]while[/color] ([color=#098658]1[/color]) { [color=#af00db]if[/color] ([color=#001080]time[/color] == [color=#098658]500[/color])[color=#008000] /* 1000 * 1ms = 1s 时间到 */[/color] { [color=#001080]time[/color] = [color=#098658]0[/color]; [color=#008000] /* LED1 取反 */[/color] [color=#0000ff]HandLED_TOGGLE[/color]; } } } [color=#af00db]#ifdef[/color][color=#0000ff] USE_FULL_ASSERT[/color] [color=#008000]/**[/color] [color=#008000] * [/color][color=#0000ff]@brief[/color][color=#008000] Reports the name of the source file and the source line number[/color] [color=#008000] * where the assert_param error has occurred.[/color] [color=#008000] * [/color][color=#0000ff]@param[/color][color=#008000] [/color][color=#001080]file[/color][color=#008000]: pointer to the source file name[/color] [color=#008000] * [/color][color=#0000ff]@param[/color][color=#008000] [/color][color=#001080]line[/color][color=#008000]: assert_param error line source number[/color] [color=#008000] * [/color][color=#0000ff]@retval[/color][color=#008000] None[/color] [color=#008000] */[/color] [color=#0000ff]void[/color] [color=#795e26]assert_failed[/color]([color=#0000ff]char[/color] *[color=#001080]file[/color], [color=#0000ff]uint32_t[/color] [color=#001080]line[/color]) { [color=#008000] /* User can add his own implementation to report the file name and line number,[/color] [color=#008000] tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */[/color] [color=#008000] /* Infinite loop */[/color] [color=#af00db]while[/color] ([color=#098658]1[/color]) { } } [color=#af00db]#endif[/color][color=#008000] /* USE_FULL_ASSERT */[/color] [/font][/backcolor] 我是新人,还没有家园币,暂时还没法设置悬赏,实在不好意思,麻烦大家了,多谢赐教!
6953浏览量 10回复量 关注量 -
GD32F405RG 芯片 DMA 初始化代码异常
GD32F405RG 芯片 DMA 初始化代码如下。 发现 USART_DENT_ENABLE 和 USART_DENR_ENABLE 无法识别。 已经加载 "gd32f4xx_usart.h" "gd32f4xx_dma.h" 2个文件。依旧不行。 有知道是什么问题吗?
1768浏览量 2回复量 关注量 -
AC78406 多个串口中断失效 sos
各位前辈好。第一次用AC78406芯片。使用uart0 uart1中断接受不定长数据。单个串口可以接收了。两个串口同时使用只有先初始化的那个串口可以进入中断。请问哪里配置有问题吗?代码是用AutoGen Studio生成的。[color=#dadada][backcolor=rgb(30, 30, 30)][font=Consolas, "][color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]string.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]ckgen_drv.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]gpio_drv.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]gpio_hw.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]uart_drv.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]uart_hw.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]uart_irq.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]dma_drv.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]gpio.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]drv_comm.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]FreeRTOS.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]event_groups.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]ac7840x_irq_cb.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]define[/color][color=#c8c8c8] [/color][color=#beb7ff]RECELENGTHMAX[/color][color=#c8c8c8] [/color][color=#b5cea8]1024[/color] [color=#569cd6]static[/color] [color=#4ec9b0]uart_state_t[/color] [color=#c8c8c8]s_uart0State[/color] [color=#b4b4b4]=[/color] [color=#b4b4b4]{[/color][color=#569cd6]NULL[/color][color=#b4b4b4]};[/color][color=#57a64a] /*UART运行变量状态*/[/color] [color=#569cd6]static[/color] [color=#4ec9b0]uart_state_t[/color] [color=#c8c8c8]s_uart1State[/color] [color=#b4b4b4]=[/color] [color=#b4b4b4]{[/color][color=#569cd6]NULL[/color][color=#b4b4b4]};[/color][color=#57a64a] /*UART运行变量状态*/[/color] [color=#569cd6]static[/color] [color=#4ec9b0]uart_user_config_t[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#4ec9b0]uart_user_config_t[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#c8c8c8]g_receive0Data[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]short[/color] [color=#569cd6]int[/color] [color=#c8c8c8]g_receive0Data_count[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#c8c8c8]receive0Data_group[/color][color=#b4b4b4][[/color][color=#beb7ff]RECELENGTHMAX[/color] [color=#b4b4b4]=[/color] [color=#b4b4b4]{[/color][color=#b5cea8]0[/color][color=#b4b4b4]};[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#c8c8c8]g_receive1Data[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]short[/color] [color=#569cd6]int[/color] [color=#c8c8c8]g_receive1Data_count[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#569cd6]static[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#c8c8c8]receive1Data_group[/color][color=#b4b4b4][[/color][color=#beb7ff]RECELENGTHMAX[/color] [color=#b4b4b4]=[/color] [color=#b4b4b4]{[/color][color=#b5cea8]0[/color][color=#b4b4b4]};[/color] [color=#4ec9b0]EventGroupHandle_t[/color] [color=#c8c8c8]EventGroupHandle_uart[/color] [color=#b4b4b4]=[/color] [color=#569cd6]NULL[/color][color=#b4b4b4];[/color] [color=#57a64a]/**[/color] [color=#57a64a] * [/color][color=#569cd6]@brief[/color][color=#57a64a] This function handle UART0 rx interrupt.[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]driverState[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]event[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]userData[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@return[/color][color=#57a64a] none[/color] [color=#57a64a] */[/color] [color=#569cd6]void[/color] [color=#dcdcaa]UART0_RX_IRQHandler_Callback[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color] [color=#b4b4b4]*[/color][color=#9a9a9a]driverState[/color][color=#b4b4b4],[/color] [color=#4ec9b0]uint32_t[/color] [color=#9a9a9a]event[/color][color=#b4b4b4],[/color] [color=#569cd6]void[/color] [color=#b4b4b4]*[/color][color=#9a9a9a]userData[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* USER CODE BEGIN UART0_RX_IRQHandler_Callback */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#9a9a9a]event[/color] [color=#b4b4b4]==[/color] [color=#b5cea8]UART_EVENT_RX_FULL[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#b4b4b4] [/color][color=#57a64a]// xEventGroupSetBits(EventGroupHandle_uart1, EVENT_UART1_RX);[/color] [color=#c8c8c8]receive0Data_group[/color][color=#b4b4b4][[/color][color=#c8c8c8]g_receive0Data_count[/color] [color=#b4b4b4]=[/color] [color=#c8c8c8]g_receive0Data[/color][color=#b4b4b4];[/color] [color=#c8c8c8]g_receive0Data_count[/color][color=#b4b4b4]++;[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#c8c8c8]g_receive0Data_count[/color] [color=#b4b4b4]>=[/color] [color=#beb7ff]RECELENGTHMAX[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#c8c8c8]g_receive0Data_count[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#dcdcaa]UART_DRV_ReceiveData[/color][color=#b4b4b4]([/color][color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]g_receive0Data[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE END UART0_RX_IRQHandler_Callback */[/color] [color=#b4b4b4]}[/color] [color=#57a64a]/**[/color] [color=#57a64a] * [/color][color=#569cd6]@brief[/color][color=#57a64a] This function handle UART1 rx interrupt.[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]driverState[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]event[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@param[/color][color=#57a64a][[/color][color=#569cd6]in[/color][color=#57a64a]] [/color][color=#9a9a9a]userData[/color][color=#57a64a]: callback parameter[/color] [color=#57a64a] * [/color][color=#569cd6]@return[/color][color=#57a64a] none[/color] [color=#57a64a] */[/color] [color=#569cd6]void[/color] [color=#dcdcaa]UART1_RX_IRQHandler_Callback[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color] [color=#b4b4b4]*[/color][color=#9a9a9a]driverState[/color][color=#b4b4b4],[/color] [color=#4ec9b0]uint32_t[/color] [color=#9a9a9a]event[/color][color=#b4b4b4],[/color] [color=#569cd6]void[/color] [color=#b4b4b4]*[/color][color=#9a9a9a]userData[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* USER CODE BEGIN UART1_RX_IRQHandler_Callback */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#9a9a9a]event[/color] [color=#b4b4b4]==[/color] [color=#b5cea8]UART_EVENT_RX_FULL[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#b4b4b4] [/color][color=#57a64a]// xEventGroupSetBits(EventGroupHandle_uart1, EVENT_UART1_RX);[/color] [color=#c8c8c8]receive1Data_group[/color][color=#b4b4b4][[/color][color=#c8c8c8]g_receive1Data_count[/color] [color=#b4b4b4]=[/color] [color=#c8c8c8]g_receive1Data[/color][color=#b4b4b4];[/color] [color=#c8c8c8]g_receive1Data_count[/color][color=#b4b4b4]++;[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#c8c8c8]g_receive1Data_count[/color] [color=#b4b4b4]>=[/color] [color=#beb7ff]RECELENGTHMAX[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#c8c8c8]g_receive1Data_count[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#dcdcaa]UART_DRV_ReceiveData[/color][color=#b4b4b4]([/color][color=#b5cea8]1[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]g_receive1Data[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE END UART1_RX_IRQHandler_Callback */[/color] [color=#b4b4b4]}[/color] [color=#57a64a]/* UART0 init function */[/color] [color=#569cd6]static[/color] [color=#569cd6]void[/color] [color=#dcdcaa]ATC_UART0_Init[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]memset[/color][color=#b4b4b4](&[/color][color=#c8c8c8]uart0Config[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#569cd6]sizeof[/color][color=#b4b4b4]([/color][color=#c8c8c8]uart0Config[/color][color=#b4b4b4]));[/color] [color=#57a64a] /**[/color] [color=#57a64a] GPIO Configuration for UART0[/color] [color=#57a64a] PB1 --> UART0_TX[/color] [color=#57a64a] PB0 --> UART0_RX[/color] [color=#57a64a] */[/color] [color=#dcdcaa]GPIO_DRV_SetMuxModeSel[/color][color=#b4b4b4]([/color][color=#beb7ff]PORTB[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4],[/color] [color=#b5cea8]PORT_MUX_ALT2[/color][color=#b4b4b4]);[/color] [color=#dcdcaa]GPIO_DRV_SetMuxModeSel[/color][color=#b4b4b4]([/color][color=#beb7ff]PORTB[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#b5cea8]PORT_MUX_ALT2[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* UART0 interrupt1 Init */[/color] [color=#dcdcaa]NVIC_SetPriority[/color][color=#b4b4b4]([/color][color=#b5cea8]UART0_IRQn[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4]);[/color] [color=#dcdcaa]NVIC_EnableIRQ[/color][color=#b4b4b4]([/color][color=#b5cea8]UART0_IRQn[/color][color=#b4b4b4]);[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]baudRate [color=#b4b4b4]=[/color] [color=#b5cea8]38400[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]parityMode [color=#b4b4b4]=[/color] [color=#b5cea8]UART_PARITY_DISABLED[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]stopBitCount [color=#b4b4b4]=[/color] [color=#b5cea8]UART_ONE_STOP_BIT[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]bitCountPerChar [color=#b4b4b4]=[/color] [color=#b5cea8]UART_8_BITS_PER_CHAR[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]transferType [color=#b4b4b4]=[/color] [color=#b5cea8]UART_USING_INTERRUPTS[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart0Config[/color][color=#b4b4b4].[/color]rxCallback [color=#b4b4b4]=[/color] [color=#dcdcaa]UART0_RX_IRQHandler_Callback[/color][color=#b4b4b4];[/color] [color=#dcdcaa]UART_DRV_Init[/color][color=#b4b4b4]([/color][color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]s_uart0State[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]uart0Config[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE BEGIN UART0_Init 2 */[/color] [color=#dcdcaa]UART_DRV_ReceiveData[/color][color=#b4b4b4]([/color][color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]g_receive0Data[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE END UART0_Init 2 */[/color] [color=#b4b4b4]}[/color] [color=#57a64a]/* UART1 init function */[/color] [color=#569cd6]static[/color] [color=#569cd6]void[/color] [color=#dcdcaa]ATC_UART1_Init[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]memset[/color][color=#b4b4b4](&[/color][color=#c8c8c8]uart1Config[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#569cd6]sizeof[/color][color=#b4b4b4]([/color][color=#c8c8c8]uart1Config[/color][color=#b4b4b4]));[/color] [color=#57a64a] /**[/color] [color=#57a64a] GPIO Configuration for UART1[/color] [color=#57a64a] PC9 --> UART1_TX[/color] [color=#57a64a] PC8 --> UART1_RX[/color] [color=#57a64a] */[/color] [color=#dcdcaa]GPIO_DRV_SetMuxModeSel[/color][color=#b4b4b4]([/color][color=#beb7ff]PORTC[/color][color=#b4b4b4],[/color] [color=#b5cea8]9[/color][color=#b4b4b4],[/color] [color=#b5cea8]PORT_MUX_ALT2[/color][color=#b4b4b4]);[/color] [color=#dcdcaa]GPIO_DRV_SetMuxModeSel[/color][color=#b4b4b4]([/color][color=#beb7ff]PORTC[/color][color=#b4b4b4],[/color] [color=#b5cea8]8[/color][color=#b4b4b4],[/color] [color=#b5cea8]PORT_MUX_ALT2[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* UART1 interrupt1 Init */[/color] [color=#dcdcaa]NVIC_SetPriority[/color][color=#b4b4b4]([/color][color=#b5cea8]UART1_IRQn[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4]);[/color] [color=#dcdcaa]NVIC_EnableIRQ[/color][color=#b4b4b4]([/color][color=#b5cea8]UART1_IRQn[/color][color=#b4b4b4]);[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]baudRate [color=#b4b4b4]=[/color] [color=#b5cea8]38400[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]parityMode [color=#b4b4b4]=[/color] [color=#b5cea8]UART_PARITY_DISABLED[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]stopBitCount [color=#b4b4b4]=[/color] [color=#b5cea8]UART_ONE_STOP_BIT[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]bitCountPerChar [color=#b4b4b4]=[/color] [color=#b5cea8]UART_8_BITS_PER_CHAR[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]transferType [color=#b4b4b4]=[/color] [color=#b5cea8]UART_USING_INTERRUPTS[/color][color=#b4b4b4];[/color] [color=#c8c8c8]uart1Config[/color][color=#b4b4b4].[/color]rxCallback [color=#b4b4b4]=[/color] [color=#dcdcaa]UART1_RX_IRQHandler_Callback[/color][color=#b4b4b4];[/color] [color=#dcdcaa]UART_DRV_Init[/color][color=#b4b4b4]([/color][color=#b5cea8]1[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]s_uart1State[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]uart1Config[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE BEGIN UART1_Init 2 */[/color] [color=#dcdcaa]UART_DRV_ReceiveData[/color][color=#b4b4b4]([/color][color=#b5cea8]1[/color][color=#b4b4b4],[/color] [color=#b4b4b4]&[/color][color=#c8c8c8]g_receive1Data[/color][color=#b4b4b4],[/color] [color=#b5cea8]1[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* USER CODE END UART1_Init 2 */[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]drv_comm_init[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]memset[/color][color=#b4b4b4]([/color][color=#c8c8c8]receive0Data_group[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#569cd6]sizeof[/color][color=#b4b4b4]([/color][color=#c8c8c8]receive0Data_group[/color][color=#b4b4b4]));[/color] [color=#dcdcaa]memset[/color][color=#b4b4b4]([/color][color=#c8c8c8]receive1Data_group[/color][color=#b4b4b4],[/color] [color=#b5cea8]0[/color][color=#b4b4b4],[/color] [color=#569cd6]sizeof[/color][color=#b4b4b4]([/color][color=#c8c8c8]receive1Data_group[/color][color=#b4b4b4]));[/color] [color=#c8c8c8]EventGroupHandle_uart[/color] [color=#b4b4b4]=[/color] [color=#dcdcaa]xEventGroupCreate[/color][color=#b4b4b4]();[/color] [color=#dcdcaa]ATC_UART0_Init[/color][color=#b4b4b4]();[/color] [color=#dcdcaa]ATC_UART1_Init[/color][color=#b4b4b4]();[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]drv_comm_write[/color][color=#b4b4b4]([/color][color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#b4b4b4]*[/color][color=#9a9a9a]p_data[/color][color=#b4b4b4],[/color] [color=#569cd6]unsigned[/color] [color=#569cd6]char[/color] [color=#9a9a9a]length[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]drv_comm_read[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#b4b4b4]}[/color] [/font][/backcolor][/color]
1830浏览量 0回复量 关注量 -
USB虚拟串口驱动为什么只有Windows平台,其他平台免驱吗 sos
[list] [*]就是下面这个驱动程序USB Virtual Com Port Driver2.0.2.2673[color=rgb(51, 51, 51)][backcolor=transparent][img=16,0]https://www.gd32mcu.com/images/icon_rar.png[/img][/backcolor][/color]无2017-09-21 [p=24, null, left][color=#666666][font=Arial]Introduction:USB虚拟串口驱动[/font][/color][/p] [*][p=24, null, left][font=Arial][color=#666666]https://www.gd32mcu.com/download/down/document_id/44/path_type/1[/color][/font][/p] [/list]
810浏览量 0回复量 关注量