STM32串口程序的一般配置方法
2024-10-01 00:07:03
#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(); //等待中端发生 }
最新文章
- SQLSERVER自动定时(手动)备份工具
- Django 基础(一)
- vs2015企业版太大了
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
- Ubuntu(14.04)远程连接windwos(server2008 r2)
- Python: Catch multiple exceptions in one line (except block)
- MySQL备份与复制
- ios 码云的使用总结
- Ant学习笔记(1) 基础知识
- applicationContext.xml 配置文件的存放位置
- 轻量级数据库sqlite的编译
- Linux 技巧之 Grub 超实用技巧
- CentOS7 PostgreSQL 主从配置( 一)
- 《JAVASCRIPT高级程序设计》window/location/navigator/screen/history对象
- TCP/IP 协议栈 ------ ICMP
- 笔记:Maven 私服 Nexus 权限控制
- Python基础(十) __init__与__new__区别
- 搜索核心原理之网页和查询的相关性——TF-IDF
- shell下变量比较最佳实践
- MTIM(中间人攻击)