大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-8-6
|
发表于 2017-12-27 22:12:10
|
显示全部楼层
我也是初学者,就是初始化了2个串口。收发正常。
// 串口4-UART4
#define DEBUG_USART4 UART4
#define DEBUG_USART4_CLK RCC_APB1Periph_UART4
#define DEBUG_USART4_APBxClkCmd RCC_APB1PeriphClockCmd
#define DEBUG_USART4_BAUDRATE 115200
// USART GPIO 引脚宏定义
#define DEBUG_USART4_GPIO_CLK (RCC_APB2Periph_GPIOC)
#define DEBUG_USART4_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART4_TX_GPIO_PORT GPIOC
#define DEBUG_USART4_TX_GPIO_PIN GPIO_Pin_10
#define DEBUG_USART4_RX_GPIO_PORT GPIOC
#define DEBUG_USART4_RX_GPIO_PIN GPIO_Pin_11
#define DEBUG_USART4_IRQ UART4_IRQn
#define DEBUG_USART4_IRQHandler UART4_IRQHandler
// 串口5-UART5
#define DEBUG_USART5 UART5
#define DEBUG_USART5_CLK RCC_APB1Periph_UART5
#define DEBUG_USART5_APBxClkCmd RCC_APB1PeriphClockCmd
#define DEBUG_USART5_BAUDRATE 115200
// USART GPIO 引脚宏定义
#define DEBUG_USART5_GPIO_CLK (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
#define DEBUG_USART5_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART5_TX_GPIO_PORT GPIOC
#define DEBUG_USART5_TX_GPIO_PIN GPIO_Pin_12
#define DEBUG_USART5_RX_GPIO_PORT GPIOD
#define DEBUG_USART5_RX_GPIO_PIN GPIO_Pin_2
#define DEBUG_USART5_IRQ UART5_IRQn
#define DEBUG_USART5_IRQHandler UART5_IRQHandler
static void NVIC_Configuration_UART4(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
//UART4初始化
/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置USART为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART4_IRQ;
/* 抢断优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief 配置嵌套向量中断控制器NVIC
* @param 无
* @retval 无
*/
static void NVIC_Configuration_UART5(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
//UART5初始化
/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置USART为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART5_IRQ;
/* 抢断优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief USART GPIO 配置,工作参数配置
* @param 无
* @retval 无
*/
void USART4_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
//初始化UART4
// 打开串口GPIO的时钟
DEBUG_USART4_GPIO_APBxClkCmd(DEBUG_USART4_GPIO_CLK, ENABLE);
// 打开串口外设的时钟
DEBUG_USART4_APBxClkCmd(DEBUG_USART4_CLK, ENABLE);
// 将USART Tx的GPIO配置为推挽复用模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART4_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART4_TX_GPIO_PORT, &GPIO_InitStructure);
// 将USART Rx的GPIO配置为浮空输入模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART4_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART4_RX_GPIO_PORT, &GPIO_InitStructure);
// 配置串口的工作参数
// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART4_BAUDRATE;
// 配置 针数据字长
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
// 配置停止位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
// 配置校验位
USART_InitStructure.USART_Parity = USART_Parity_No ;
// 配置硬件流控制
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
// 配置工作模式,收发一起
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// 完成串口的初始化配置
USART_Init(DEBUG_USART4, &USART_InitStructure);
// 串口中断优先级配置
NVIC_Configuration_UART4();
// 使能串口接收中断
USART_ITConfig(DEBUG_USART4, USART_IT_RXNE, ENABLE);
// 使能串口
USART_Cmd(DEBUG_USART4, ENABLE);
}
/**
* @brief USART GPIO 配置,工作参数配置
* @param 无
* @retval 无
*/
void USART5_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
//初始化UART5
// 打开串口GPIO的时钟
DEBUG_USART5_GPIO_APBxClkCmd(DEBUG_USART5_GPIO_CLK, ENABLE);
// 打开串口外设的时钟
DEBUG_USART5_APBxClkCmd(DEBUG_USART5_CLK, ENABLE);
// 将USART Tx的GPIO配置为推挽复用模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART5_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART5_TX_GPIO_PORT, &GPIO_InitStructure);
// 将USART Rx的GPIO配置为浮空输入模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART5_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART5_RX_GPIO_PORT, &GPIO_InitStructure);
// 配置串口的工作参数
// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART4_BAUDRATE;
// 配置 针数据字长
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
// 配置停止位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
// 配置校验位
USART_InitStructure.USART_Parity = USART_Parity_No ;
// 配置硬件流控制
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
// 配置工作模式,收发一起
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// 完成串口的初始化配置
USART_Init(DEBUG_USART5, &USART_InitStructure);
// 串口中断优先级配置
NVIC_Configuration_UART5();
// 使能串口接收中断
USART_ITConfig(DEBUG_USART5, USART_IT_RXNE, ENABLE);
// 使能串口
USART_Cmd(DEBUG_USART5, ENABLE);
}
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
USART4_Config();
USART5_Config();
Usart_SendByte(DEBUG_USART4, 0x44);
Usart_SendByte(DEBUG_USART5, 0x55); |
|