#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. 百度地图API详细介绍

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  2. Luogu P1330 封锁阳光大学【Dfs】 By cellur925

    题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...

  3. 深入理解Android

    http://blog.csdn.net/innost/article/details/47254381

  4. ROS学习笔记十二:使用gazebo在ROS中仿真

    想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...

  5. 题解报告:hdu 1203 I NEED A OFFER!(01背包)

    Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用 ...

  6. shell 2 解析

    ---- shell 3 /home/oracle/utility/macro/call_autopurge_arch.sh Description: Call purge archive log f ...

  7. 451 Sort Characters By Frequency 根据字符出现频率排序

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...

  8. D. Green and Black Tea 贪心 + 构造

    http://codeforces.com/contest/746/problem/D 首先说下一定是NO的情况. 假设a > b 那么,b最多能把a分成b + 1分,如果每份刚好是k的话,那么 ...

  9. DEV—【GridControl 按钮列无法触发点击事件解决方案】

    需要在按钮列的OptionColumn属性栏中找到下面两个属性,并且改为True AllowEdit=True,AllowFocus=True.

  10. android开发学习——Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/BarcodeFormat;

    在Android Studio中,sync project没有错,但是run时会报错; http://blog.csdn.net/q568430333/article/details/50969033 ...