#include "stm32f10x.h"

/************************************************
该程序讲解串口程序的一般配置方法:
步骤为:
1、先对端口进行复用或者重映射操作(该程序中是对端口进行复用操作)
2、串口复位,函数为USART_DeInit();
3、串口初始化:USART_Init();
4、中断初始化: NVIC_Init();
5、串口使能:USART_Cmd();
6、开启中断:USART_ITConfig();
7、编写中断处理函数:void USART1_IRQHandler(void) briangooole@gmail.com
于2017年06月29日
-------------------------
USART_TX | PA9
-------------------------
USART_RX | PA10
-------------------------
************************************************/ void MY_USART_Init(void)
{ GPIO_InitTypeDef GPIO_InitStrue; //在GPIO_Init函数调用时需定义一个GPIO_InitTypeDef结构体类型变量
USART_InitTypeDef USART_InitStrue; //USART_Init函数调用时需定义一个USART_InitTypeDef结构体类型变量
NVIC_InitTypeDef NVIC_InitStrue; //USART_Init函数调用时需定义一个NVIC_InitTypeDef结构体类型变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//由于串口功能是GPIO的第二功能,所以要对端口进行复用操作,
//一般步骤为:GPIO时钟使能-》复用的外设时钟使能-》将端口按照复用的功能进行模式配置 USART_DeInit(USART1); //串口复位 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; //复用功能推挽输出模式
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; //PA9
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz; //设置输出速度
GPIO_Init(GPIOA,&GPIO_InitStrue); GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入模式
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10; //PA10
GPIO_Init(GPIOA,&GPIO_InitStrue); USART_InitStrue.USART_BaudRate=;//设置波特率9600
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制,相关寄存器为CR3
USART_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//模式为接收和发送
USART_InitStrue.USART_Parity=USART_Parity_No;//无奇偶校验位0x0000,相关寄存器为SR1的PS位
USART_InitStrue.USART_StopBits=USART_StopBits_1; //1个停止位
USART_InitStrue.USART_WordLength=USART_WordLength_8b; //数据长度为8位
USART_Init(USART1,&USART_InitStrue); //串口初始化 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn; //串口1对应的中断名称
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; //使能该中断通道
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=;//抢占优先级为2,因为此程序只有一个中断,故可任意设置
NVIC_InitStrue.NVIC_IRQChannelSubPriority=;//响应优先级为1,因为此程序只有一个中断,故可任意设置
NVIC_Init(&NVIC_InitStrue); //中断初始化 USART_Cmd(USART1,ENABLE); //串口使能 就是将寄存器CR1中的UE位置1 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口中断,也叫开启串口中断,第二个参数是设置具体开启哪种中断,具体为寄存器SR } void USART1_IRQHandler(void) //中断函数
{
u16 DATA;
if(USART_GetITStatus(USART1,USART_IT_RXNE))//判断如果收到了数据,收到数据CR1中RXNE位为1,该函数的返回值为1,则执行if包含的语句
{
DATA=USART_ReceiveData(USART1);//读取数据
USART_SendData(USART1,DATA);//发送读到的数据
} } int main(void) //主函数
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//进行中断分组,分为2组:2位抢占优先级,2位响应优先级
MY_USART_Init(); //调用串口初始化函数
while();  //等待中端发生 }

STM32串口程序的一般配置方法的更多相关文章

  1. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  2. STM32串口——中断方式的一般配置方法

    #include "stm32f10x.h" /************************************************ 该程序讲解串口程序的一般配置方法: ...

  3. STM32串口打印输出乱码的解决办法

    前言 最近在试用uFUN开发板,下载配套的Demo程序,串口数据输出正常,当使用另一个模板工程,调用串口printf调试功能时,输出的却是乱码,最后发现是外部晶振频率不一样.很多STM32开发板都是使 ...

  4. STM32串口USART1的使用方法和程序

    通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半 ...

  5. STM32串口USART的使用方法和程序

    通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半 ...

  6. STM32串口USART1的使用方法

    前言: 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的   波特率选择,支持同 ...

  7. 如何使用串口来给STM32下载程序

    前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...

  8. STM32串口通信配置(USART1+USART2+USART3+UART4) (转)

    一.串口一的配置(初始化+中断配置+中断接收函数) 1 /*====================================================================== ...

  9. Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法

    Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...

随机推荐

  1. linux系统 for 大数据

    使用大数据前,需要选择linux系统,本人选择的是centos6.9系统,并且装在虚拟机上,并且要注意: 1.网络类型选择NAT. 2.语言设置为English(English). 3.操作系统的键盘 ...

  2. linux 重名名、删除文件操作

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 删除文件夹 r ...

  3. 配置yum源的步骤(阿里源)

    配置yum源的步骤1.可以移除默认的yum仓库,也就是删除 /etc/yum.repos.d/底下所有的.repo文件(踢出国外的yum源) 1.配置yum源,找到阿里云的官方镜像源地址 https: ...

  4. /bin,/sbin,/usr/sbin,/usr/bin 目录之简单区别

    /bin,/sbin,/usr/sbin,/usr/bin 目录 这些目录都是存放命令的,首先区别下/sbin和/bin: 从命令功能来看,/sbin 下的命令属于基本的系统命令,如shutdown, ...

  5. Qt事件系统之三:键盘事件

    QKeyEvent类用来描述一个键盘事件.当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件. QKeyEvent的key()函数可以获取具体的按键,对于Qt中给定的所有按键,可 ...

  6. Android Dialogs(1)Dialog简介及Dialog分类

    Dialogs A dialog is a small window that prompts the user to make a decision or enter additional info ...

  7. log4js日志配置问题

    http://blog.csdn.net/cdnight/article/details/50857268 在做项目中,我们的node日志采用的是log4js框架,使用文件方式存储,但在后面的需求中增 ...

  8. 基于Ubuntu14.04下Suricata(一款高性能的网络IDS、IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐)

    为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...

  9. 点击后打开QQ临时会话

    1.QQ官方提供的代码.如果没有加好友需要加好友才能聊天,也可以到这里http://shang.qq.com/v3/index.html 开通一个服务,同样可以实现临时会话. <a href=& ...

  10. 第一次阅读作业 xinzcover

    ---恢复内容开始--- 第一次阅读和准备作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作 ...