STM32f4---串口通信实验代码(01)

发布者:colchery最新更新时间:2018-09-29 来源: eefocus关键字:STM32f4  串口通信  实验代码 手机看文章 扫描二维码
随时随地手机看文章

打开串口实验工程,然后在SYSTEM组下双击usart.c,我们就可以看到该文件里面的代码,先介绍 uart_init函数,该函数代码如下:

void uart_init(u32 bound)

{

      GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

 

//GPIOA和USART1时钟使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能 GPIOA 时钟  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能 USART1 时钟  

  

//USART_DeInit(USART1);  //复位串口 1

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //PA9复用为USART1

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //PA10复用为USART1

  

//USART1_TX   PA.9 PA.10 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //速度 50MHz

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

 

//USART 初始化设置

USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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); //初始化串口

 

#if EN_USART1_RX  //NVIC 设置,使能中断

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断

//Usart1 NVIC 配置

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2

NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;    //响应优先级 2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      //IRQ 通道使能

NVIC_Init(&NVIC_InitStructure);  //根据指定的参数初始化VIC 寄存器、

#endif

}

   USART_Cmd(USART1, ENABLE);  //使能串口 

从该代码可以看出,其初始化串口的过程,和我们前面介绍的一致。我们用标号~标示了顺序:

  串口时钟使能,GPIO时钟使能

  设置引脚复用器映射

  GPIO 端口初始化设置

  串口参数初始化

  初始化 NVIC 并且开启中断

  使能串口

这里需要注意一点,因为我们使用到了串口的中断接收,必须在 usart.h 里面设置 EN_USART1_RX为1 (默认设置就是1的) 。该函数才会配置中断使能,以及开启串口1的NVIC中断。这里我们把串口 1中断放在组2,优先级设置为组2 里面的最低。

串口 1 的中断服务函数 USART1_IRQHandler,在 5.3.3 已经有详细介绍了,这里我们就不再介绍了。


关键字:STM32f4  串口通信  实验代码 引用地址:STM32f4---串口通信实验代码(01)

上一篇:STM32f4---串口通信实验代码(02)
下一篇:STM32f4---蜂鸣器实验代码

推荐阅读最新更新时间:2024-03-16 16:14

使用串口通信实现AVR的ISP下载
这段时间看了芯艺的AVR教程,准备自己做一个串口下载工具,想法很简单,使用串口的交互,将数据发送到AVR单片机中,在单片机中实现真正的下载功能,给其他的单片机下载程序。因为有了下载到89S52的范例,感觉应该不会有太大的技术障碍。 准备步骤: 1.先做一个简单功能的AVR开发板,包括一个流水灯、串口、下载口,还要一个使用5位的数据口,用来控制另一开发板的下载。 2.实现一个类似带调试功能的串口通讯程序,跟Windows自带的差不多的串口通信程序,仅仅在某些命令后,弹出对话框,选择需要的文件,比如WriteFlash命令后选择程序文件。 3.最后实现与原先功能相同的开发板,使用之前的开发板作为下载器,下载程序。
[单片机]
stm32F4系列MCU,窗口看门狗 WWDG中的bug
stm32F4系列MCU,窗口看门狗 WWDG中的bug。 1. 如果使能预喂狗中断,那么必须满足如下两点 (1)在开启wwdg中断之前,需要先将 SR 寄存器中的EWI标志位清零,否则会看门狗会不断复位 (2)在wwdg_irq里加上一小段延时,否则看门狗会不断复位 2. 如果系统里还有其他中断,比如按键,在按键中断中设置一个变量,这个变量在wwdg_isr中读取,来决定是否停止喂狗 这样按下按键以后,系统直接就飞了。 这里给出一个测试代码。 如下所示。 / * @file USART/USART_Printf/main.c * @author MCD Application Team * @version V1
[单片机]
基于RS485的组态王与单片机多机串口通信设计
1 引言 随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王)、 MCGS、WinCC等。KingView软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。由 于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成本。而单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。 2 组态王与单片机的串口通讯方法 目前,组态王与单片机的通信多是通过动态数据交换(DDE
[单片机]
基于RS485的组态王与单片机多机<font color='red'>串口通信</font>设计
C语言PIC16 serial bootloader和C#语言bootloader PC端串口通信程序
  新PIC16 Bootloader   在完成HyperBootloader之后(具体详见我之前的随笔),我决定重写PIC bootloader。为什么呢? HyperBootloader是由PC端的串口通信软件--超级终端来传送Hex数据的,一行一行地传送,每传送一行Delay 20ms,以等待Hyperbootloader烧录完。因为这样效率有些低,所以我决定自己写PC端的串口通信程序和PIC bootloader,为了提高效率还定义了PC端串口通信程序和PIC单片机端bootloader之间的通信协定。首先我重写PIC16 bootloader, 我要完成PIC16单片机端bootloader程序--我命其名为PhsBo
[单片机]
C语言PIC16 serial bootloader和C#语言bootloader PC端<font color='red'>串口通信</font>程序
Stm32F407ZGT6 串口通迅 USART3
usart3.h //STM32F407zgt6 串口3 #ifndef __USART3_H #define __USART3_H #include sys.h #define USART3_MAX_RECV_LEN 255 #define USART3_MAX_SEND_LEN 255 extern u8 USART3_RX_buf ; extern u8 USART3_TX_buf ; extern u16 USART3_RX_STA; //接收状态标记 void uart3_init(u32 bound); #endif usart3c #include usart3.h u8 USART3_RX_buf ; u
[单片机]
基于LED光源的温室光环境监测与控制系统设计
0 引言 LED作为新一代光源,除了环保节能的特点外,相较于目前农业领域常用的荧光灯或高压钠灯等人工光源,具有光量可调整、光质可调整、冷却负荷低与允许提高单位面积栽培量等优点,对封闭有环控的农业生产环境,如植物组织培养室等是一种非常适合的人工光源。对温室中植物生长的光环境参数准确监测及控制非常重要,为了实现对光环境参数的准确检测及智能控制,在做了需求分析的基础上,提出并设计了一种基于LED光源的温室光环境监测与控制系统(以下简称“监测与控制系统”)设计方案。该系统能够完成对其光环境准确监测与控制。 1 监控需求分析 LED理想的工作温度通常为25℃。在该温度时,发光强度具有最大值。温度升高,则导通电流将相应地增加。过热的
[电源管理]
基于LED光源的温室光环境监测与控制系统设计
STM32f4---OLCD显示实验代码(04)
在知道了取模方式之后,我们就可以根据取模的方式来编写显示字符的代码了,这里我们针对以上取模方式的显示字符代码如下: // 在指定位置显示一个字符 , 包括部分字符 //x:0~127 y:0~63 //mode:0, 反白显示 ;1, 正常显示 //size: 选择字体 12/16/24 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) { u8 temp,t,t1,y0=y; u8 csize=(size/8+((size%8)?1:0))*(size/2);// 得到字体一个字符对应点阵集所占的字节数 chr=
[单片机]
STM8学习笔记---串口通信中如何自己定义通信协议
在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的。好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写。今天就来说一下如何串口通信协议是如何定义出来的。 先看一段最简单的串口程序。 void Uart1_Init( unsigned int baudrate ) { unsigned int baud; baud = 16000000 / baudrate; Uart1_IO_Init(); //IO口初始化 UART1_CR1 = 0; UART1_CR2 = 0; UART1_CR3 = 0; UART1_BRR2 = ( uns
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved