stm32 添加串口4 UART4出错

stm32前面三个串口名均为:USART+串口号(USART1,USART2,USART3)

第四第五位:UART+串口号(UART4,UART5)

相比前面少了个S,如果添加后不成功可以考虑是不是函数名出错;

下面位串口四的添加代码:

void USART4_Init(u32 bound)    //初始化
{

	
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure; 

	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);  //USART4时钟设置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 	  

	USART_DeInit(UART4);  //复位串口3
	//USART4_TX	PC.10
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
	GPIO_Init(GPIOC, &GPIO_InitStructure);				  //初始化PC10
	//USART4_RX	PC.11
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;			 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入
	GPIO_Init(GPIOC, &GPIO_InitStructure);							  //初始化PC11

	//USART4初始化
	USART_InitStructure.USART_BaudRate = bound; //一般为9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位数据位
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//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(UART4, &USART_InitStructure); //初始化串口

	//Usart4 NVIC 配置
	NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;	  //子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		  //IRQ通道使能
	NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

	USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启中断
	USART_Cmd(UART4, ENABLE);					  //使能串口
	USART_ClearFlag(UART4, USART_FLAG_TXE);	   /* 清发送完成标志,Transmission Complete flag */   

}


void UART4_Send_Byte(u8 Data) //发送一个字节;
{
    USART_SendData(UART4,Data);
    while( USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET );
}

void UART4_IRQHandler(void) //中断接收处理函数;
{
    u8 res;	
    if(USART_GetITStatus(UART4,USART_IT_RXNE)!=RESET)
    {
        USART_ClearITPendingBit(UART4,USART_IT_RXNE);
        res=USART_ReceiveData(UART4);
        
        //printf("**************************\n");

        LED1 = ~LED1;
        TJC_RxFunction(res);

    }
 
}

 

### 回答1: STM32F407是一款高性能、低功耗的嵌入式微控制器。UART4是该芯片上的一个串口模块,可以通过该模块与其他设备进行通信。DMA(Direct Memory Access)是一种直接内存访问技术,可以在不经过CPU的情况下直接在内存和外设之间传输数据。空闲中断是UART模块上的一种特殊中断,当接收到完整的一帧数据时触发。 使用UART4和DMA进行通信可以大大提高数据传输效率,减轻CPU的负担。在接收数据时,可以开启UART4的空闲中断并设置DMA传输,当接收到完整的一帧数据时触发空闲中断并将数据传输到指定的内存地址中,可以使用DMA的请求信号控制传输的触发条件,也可以使用循环模式实现连续传输。 在配置空闲中断时,需要设置空闲时间,即串口接收数据后多长时间没有收到数据认为是一帧数据接收完毕。同时,在每次传输结束后需要清除空闲中断标志位,以便下一次数据接收。 总之,在使用STM32F407的UART4和DMA进行数据传输时,可以通过空闲中断实现数据的快速、可靠传输,提高系统的性能。 ### 回答2: stm32f407是一款嵌入式微控制器,内置了多个外设模块,包括UART串口模块和DMA控制器模块。使用这两个模块可以实现UART4的DMA传输和空闲中断的功能。 DMA(Direct Memory Access)可以实现不经过CPU的数据传输操作,从而减轻了CPU的负担,提高了系统的处理效率。当数据传输完成后,DMA会产生传输完成中断,此时可以使用空闲中断来处理数据。 在使用UART4 DMA空闲中断时,需要首先配置UART4和DMA控制器。具体步骤如下: 1. 配置UART4串口模块:设置波特率、数据位、停止位、奇偶校验等参数,并开启空闲中断。 2. 配置DMA控制器模块:设置DMA通道、传输方向、数据长度、数据对齐、内外设地址等参数,并开启传输完成中断。 3. 在空闲中断处理函数中,处理UART4接收到的数据,将处理结果保存到指定的内存地址中。 4. 在DMA传输完成中断处理函数中,关闭DMA传输并清除中断标志位。 通过以上配置和处理,即可实现UART4的DMA传输和空闲中断的功能。在实际应用中,可以根据具体的需求和接口特点,进行相关的调试、优化和测试。 ### 回答3: STM32F407是一款高性能ARM Cortex-M4微控制器,其中包含了多个UART接口和DMA控制器。在使用UART4进行数据传输时,可以使用DMA控制器来实现数据的一次性传输,减轻了CPU的负担,并提高了数据传输的效率。 当DMA传输数据完成后,UART模块会自动产生一个空闲中断,用于通知MCU数据已经全部发送完成,可以进行下一轮传输或者其他操作。开启空闲中断可以有效地降低CPU的使用率和功耗。 在使用UART4和DMA进行数据传输时,需要注意配置正确的DMA控制器参数和UART空闲中断参数。同时需要注意DMA传输完成后会有一个空闲中断的产生,需要及时处理该中断事件,以免数据出错或丢失。 总之,STM32F407的UART4和DMA结合使用能够大幅提高数据传输效率和节省CPU资源,同时需要注意正确配置和处理相应的中断事件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值