当前位置:首页 > 单片机 > 单片机
[导读]STM32F407xx内嵌四个通用同步/异步接收器(USART1,USART2,USART3 和USART6)和两个通用异步收发器(UART4和UART5)。这6个接口提供异步通信的IrDASIR ENDEC支持,多机通信模式,单线半双工通信模式LIN主/从功能。

STM32F407xx内嵌四个通用同步/异步接收器(USART1,USART2,USART3 和USART6)和两个通用异步收发器(UART4和UART5)。这6个接口提供异步通信的IrDASIR ENDEC支持,多机通信模式,单线半双工通信模式LIN主/从功能。 USART1和USART6接口能够速度高达10.5 Mbit / s的通信其他可用的接口通信高达5.25bit/s。USART1,USART2,USART3和USART6还提供硬件管理的CTS,RTS信号,智能卡的模式(ISO7816兼容)和类似的SPI通信能力。所有接口都可以通过DMA控制器。
这里只使用了两根线的最简单串口设置。
硬件环境:STM32F4-Discovery
软件环境:MDK4.7a
实现的功能:1、串口初始化,
2、通过串口发送数据
3、中断方式接收数据,并将接收到的数据回送。
使用库函数操作
首先,配置NVIC使用NVIC_PriorityGroupConfig()设置优先级分组,使用NVIC_Init()对NVIC进行初始化

void NVIC_Config()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_Init(&NVIC_InitStructure);

}

第二步:配置引脚功能,因为我的板子上PA9被用来驱动LED了,所以只能将将串口映射到PB6,PB7。这个设置跟F1系列的有点差别。首先初始化端口时钟,第二配置端口引脚功能,第三不设置功能映射将串口连接到引脚。

void USART_Gpio_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB , ENABLE);


//PB6->TX PB7->Rx

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);


GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1);

}

第三步:配置串口工作方式。步骤也差不多:打开时钟,用Init函数初始化串口,设置串口的接收中断,最后别忘了使能串口。

void USART_Config(void)

{

USART_Gpio_Config();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);


USART_InitStructure.USART_BaudRate = 115200;

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(USART1,&USART_InitStructure);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);


USART_Cmd(USART1,ENABLE);


}

第四步:添加串口中断函数,函数名是固定的:void USART1_IRQHandler(void)。中断进入时候,先判断接收寄存器是否有数据,有数据时候就接收,然后使用USART_SendData()将数据发回

void USART1_IRQHandler(void)

{

char c;

if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)

{

c = USART_ReceiveData(USART1);

USART_SendData(USART1,c);

}

//while(1);

}

最后就是main了,没啥可说的

int main(void)

{

NVIC_Config();

USART_Config();

while(1)

{

while(RESET == USART_GetFlagStatus(USART1,USART_FLAG_TXE));

USART_SendData(USART1,'b');

while(RESET == USART_GetFlagStatus(USART1,USART_FLAG_TXE));

USART_SendData(USART1,'a');

delay_ms(1000);

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

基于ARM® Cortex®-M4的STM32F4 MCU系列采用了意法半导体的NVM工艺和ART Accelerator™,在高达180 MHz的工作频率下通过闪存执行时其处理性能达到225 DMIPS/608 Cor...

关键字: stm32f4 ARM

stm32f4和f1都有哪些区别?除了需要的头文件不一样,管脚配置什么的有区别么?

关键字: stm32f4 f1 比较

STM32F407VET6引脚图及中文资料

关键字: stm32f4 引脚图

  UART   UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,

关键字: uart usart

比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BC...

关键字: rtc stm32f4

void InitUart(void) { GPIO_InitTypeDef GPIO_InitStructure; #if 1// (USART_USED == USART1) RCC_AHBPeriph...

关键字: stm32f30x usart 串口 初始化顺序

【实验目的】输出7路占空比不同的PWM信号是各个版本ST库必备的例子。本实验的主要目的不是表现ST芯片PWM功能的强大,而是要完成输出的精确计算。【实验内容】输出7路PWM信号,并用示波器测量输出。【实验原理】1、时

关键字: pwm stm32f4 tim1 信号输出

STM32F4的随机数发生器RNG,以环境噪声为种子,产生32位随机数供主机使用。【主要特性】1、产生32位随机数 2、两次转换时间间隔40PLL48CLK 3、随机数熵检测以发现不正常位,以产生稳定序列 3、可被关闭以...

关键字: stm32f4 随机数发生器

五、ATMEGA16的USART与PC机串行通信五—(02)、PC机发送字符给单片机,然后用液晶显示发送的字符~~~这章节也是相对挺简单的~~直接上图片吧~~基本上就这么点吧~~然后就是程序了,这里我只是粘贴一下重要的程...

关键字: atmega16 avr单片机 usart 串行通信

书接上文,开始折腾ADC的DMA传输。因为大家都在说DMA,就连ST的例子里边也是使用DMA的。 ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据...

关键字: adc dma stm32f4 数据传输 采集数据
关闭
关闭