注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙粒的博客

 
 
 

日志

 
 

stm32 串口中断  

2016-01-14 20:58:55|  分类: stm32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、功能

uasrt1收到字符,触发串口中断,将收到的字符发送回pc

2、硬件连接

PA9->USART(Tx),

PA10->USART(Rx);

3、配置文件

stm32f10x_gpio.h

stm32f10x_rcc.h

stm32f10x_usart.h

misc.h //包含中断 VNIC 配置文件

4、关键代码:

//---main文件---

#include "stm32f10x.h"

#include "test.h"

int main(void)

{

     //配置串口

     usart_config();      

     //配置串口中断控制器

     nvic_config(); 

//等待接收数据

     while(1){};

}

//中断函数

void USART1_IRQHandler(void)

{

     if(USART_GetITStatus(USART1, USART_IT_RXNE ) != RESET)

     {                     

            uint8_t temp8 = USART_ReceiveData(USART1);       

            USART_SendData(USART1, temp8);

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

     }   

}

 

//---test.c 文件---

 

#include "stm32f10x.h"

#include "test.h"

 

//配置串口,

//PA9->Tx,

//PA10->Rx

void usart_config(void)

{

     //定义端口结构

     GPIO_InitTypeDef gpio_instructure;

    

     //定义串口初始结构

     USART_InitTypeDef usart_initstructure;

    

     //开时钟,GPIOA 复用为串口

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);

    

     //配置 PA9->Tx,  复用推挽输出(手册)

     gpio_instructure.GPIO_Pin=GPIO_Pin_9;

     gpio_instructure.GPIO_Mode=GPIO_Mode_AF_PP;

     gpio_instructure.GPIO_Speed=GPIO_Speed_50MHz;

     GPIO_Init(GPIOA,&gpio_instructure);

    

     //配置 PA10->Rx,  浮空输入(手册)

     gpio_instructure.GPIO_Pin=GPIO_Pin_10;

     gpio_instructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

     GPIO_Init(GPIOA,&gpio_instructure);

    

     //配置串口 usart

     usart_initstructure.USART_BaudRate=9600;

     usart_initstructure.USART_WordLength=USART_WordLength_8b;

     usart_initstructure.USART_StopBits=USART_StopBits_1;

     usart_initstructure.USART_Parity=USART_Parity_No;

     usart_initstructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;

     usart_initstructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;      

     USART_Init(USART1,&usart_initstructure);

    

     //开中断,当串口收到数据时,触发中断

     USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);     

    

     //开串口

     USART_Cmd(USART1,ENABLE);

    

     //清串口标志

     USART_ClearFlag(USART1, USART_FLAG_TC);      

}

 

//配置中断控制器

void nvic_config(void)

{

     //定义结构

     NVIC_InitTypeDef nvic_initstructure;

    

     //配置优先组

     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    

     //定义结构参数

     nvic_initstructure.NVIC_IRQChannel=USART1_IRQn;

     nvic_initstructure.NVIC_IRQChannelPreemptionPriority=0;

     nvic_initstructure.NVIC_IRQChannelSubPriority=1;

     nvic_initstructure.NVIC_IRQChannelCmd=ENABLE;

    

     //初始化  

     NVIC_Init(&nvic_initstructure);   

}

 

 

//---test.h 文件---

#ifndef test_h_h

#define test_h_h

void usart_config(void);

 

void nvic_config(void);

 

#endif

  评论这张
 
阅读(163)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017