主分支的bsp下
STM32 拷贝的
配置如下:
/* Device Drivers */
#define RT_USING_DEVICE_IPC
#define RT_UNAMED_PIPE_NUMBER 64
#define RT_USING_SERIAL
#define RT_USING_SERIAL_V2
#define RT_SERIAL_USING_DMA
#define RT_USING_PIN
/* On-chip Peripheral Drivers */
#define BSP_USING_GPIO
#define BSP_USING_ON_CHIP_FLASH
#define BSP_USING_UART
#define BSP_USING_UART3
#define BSP_UART3_RX_USING_DMA
#define BSP_UART3_RX_BUFSIZE 256
#define BSP_UART3_TX_BUFSIZE 128
#define BSP_USING_UART8
#define BSP_UART8_TX_BUFSIZE 128
#define BSP_UART8_RX_BUFSIZE 128
其中BSP_USING_UART8作为msh串口,对uart8除了msp.c的初始化,没有使用其他配置,msh使用正常.
对uart3 增加一下内容宏定义
/* DMA1 stream1 */
#if defined(BSP_UART3_RX_USING_DMA) && !defined(UART3_RX_DMA_INSTANCE)
#define UART3_DMA_RX_IRQHandler DMA1_Stream1_IRQHandler
#define UART3_RX_DMA_RCC RCC_AHB1ENR_DMA1EN
#define UART3_RX_DMA_INSTANCE DMA1_Stream1
#define UART3_RX_DMA_REQUEST DMA_REQUEST_USART3_RX
#define UART3_RX_DMA_IRQ DMA1_Stream1_IRQn
#endif
main.c代码如下
#include
#include
#include
#define LED1_PIN GET_PIN(C, 12)
/* 串口设备句柄 */
sta
tic rt_device_t serial;
int main(void)
{
int rx_length;
uint8_t buff[32];
/* set LED2 pin mode to output */
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
/* 查找串口设备 */
serial = rt_device_find("uart3");
if (!serial)
{
rt_kprintf("find %s failed!\n", "uart3");
return RT_ERROR;
}
/* 以 DMA 接收及轮询发送方式打开串口设备 */
rt_device_open(serial, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING);
rt_device_write(serial, 0, "hello", (strlen("hello")));
while (1)
{
rx_length = rt_device_read(serial, 0, buff, 32);
if(rx_length>0)
{
rt_kprintf("%*s\n",rx_length,buff);
}
rt_pin_write(LED1_PIN, PIN_HIGH);
rt_thread_mdelay(1000);
rt_pin_write(LED1_PIN, PIN_LOW);
rt_thread_mdelay(1000);
}
}
使用串口助手,PC端能收到“hello”,但是PC端下发的数据,没有收到。
如果配置上不使用DMA,串口收发没问题。