1,配置响应的通道初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
2,DMA地址通道查找
#define USART1_RDR_Address 0x40013804
#define USART1_TDR_Address 0x40013804
3,选择对应的DMA通道
DMA_Cmd(DMA1_Channel5, DISABLE); // DMA1_Channel3 =UART3_RX
DMA_DeInit(DMA1_Channel5);
参考宏
// 串口1-USART1
#define DEBUG_USARTx USART1
#define DEBUG_USART_CLK RCC_APB2Periph_USART1
#define DEBUG_USART_APBxClkCmd RCC_APB2Periph_USART1
#define DEBUG_USART_BAUDRATE 9600
// USART GPIO 引脚宏定义
#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOB)
#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART_TX_GPIO_PORT GPIOB
#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_6
#define DEBUG_USART_RX_GPIO_PORT GPIOB
#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_7
#define DEBUG_USART_IRQ USART1_IRQChannel
#define DEBUG_USART_IRQHandler USART1_IRQHandler
打开复用时钟,打开对应的IO时钟,总线时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
注意加上复用功能配置 在IO初始化前面
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
主要操作就是这些,剩下的就是几个结构体的填充,需要打开的中断,和优先级的配置。这里放一些引子:
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
需要的完整的阔以联系。
另外上位机仿真阔以看寄存器的配置,这个功能别忘记了,非常方便