最近想把407板子上所有的串口都用自己的程序写出来,方便调用,但是除了串口1成功之外,配置2、3都有问题,我是仿照串口1 的配置配置2、3的,,可是PC就是收不到板子发的数据,请教大神指正,网上找了一些资料,也没有说这些串口在配置时有什么特别的不同。。。
这是串口1的初始化配置。。成功了
void USART1_Init(u32 baund)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个控制GPIO参数结构体变量
USART_InitTypeDef USART_InitStructure; //定义一个控制USART参数结构体变量
NVIC_InitTypeDef NVIC_InitStructure; //定义一个控制USART参数结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //串口1时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //IO口时钟使能
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //将PA9|10复用置USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
//****** IO口输出参数设置 ********//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //模式x选择为复用
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ; //输出上拉
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//****** IO口函数初始化 ********//
GPIO_Init(GPIOA,&GPIO_InitStructure);
//****** USART1参数的设置 ********//
USART_InitStructure.USART_BaudRate = baund; //设定串口发送的波特率
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送或者接收模式
USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶校验位设置
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //发送字节长度
//****** 串口函数初始化 ********//
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE); //串口函数使能 //******串口发送接收已经结束
//****** 串口中断参数配置 ********//
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择使用哪个串口中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //串口通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //中断响应优先级
//****** 串口中断函数初始化 ********//
NVIC_Init(&NVIC_InitStructure);
//****** 使能中断函数 ********//
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
}
这是串口 三的配置,不成功。。就是改了一下口,其他的基本没动,但是就是不行。
void USART3_Init(u32 baund)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个控制GPIO参数结构体变量
USART_InitTypeDef USART_InitStructure; //定义一个控制USART参数结构体变量
NVIC_InitTypeDef NVIC_InitStructure; //定义一个控制USART参数结构体变量
/***** Enable GPIO Clock *****/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //IO口时钟使能
/***** Enable GPIO Clock *****/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
/***** Coneect USART pins to AF7 *****/
GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_USART3);
//****** IO口输出参数设置 ********//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ; //输出上拉
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//****** IO口函数初始化 ********//
GPIO_Init(GPIOC,&GPIO_InitStructure);
//****** USART1参数的设置 ********//
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送或者接收模式
USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶校验位设置
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //发送字节长度
//****** 串口函数初始化 ********//
USART_Init(USART3,&USART_InitStructure);
USART_Cmd(USART3,ENABLE); //串口函数使能 //******串口发送接收已经结束
//****** 串口中断参数配置 ********//
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //选择使用哪个串口中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //串口通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //中断响应优先级
//****** NVIC Configuuration ********//
NVIC_Init(&NVIC_InitStructure);
//******Enable the USARTx Interrupt********//
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
}
有知道的吗?请教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2.考虑是不是引脚有其他用处,硬件电路导致
一周热门 更多>