stm32串口中断接收发送实验

发布者:精灵宠儿最新更新时间:2016-06-14 来源: eefocus关键字:stm32  串口中断  接收发送 手机看文章 扫描二维码
随时随地手机看文章
int main()

 

{

 

  u32 i = 0;

 

  /*芯片配置初始化----------------------------------------------------------*/

 

  RCC_Configuration();                         //复位和时钟控制配置

 

  NVIC_Configuration();                        //嵌套中断向量控制器配置

 

  GPIO_Configuration();                        //I/O配置  

 

  USART_Configuration();                         //串口配置

 

  /*指示灯初始化------------------------------------------------------------*/

 

  GPIO_SetBits(GPIOA, GPIO_Pin_12);          //熄灭LED1

 

  GPIO_SetBits(GPIOA, GPIO_Pin_15);          //熄灭LED2

 

  while(1)

 

  {

 

     i++;

 

    if (500000 == i)      //LED1闪烁,表示正常。

 

    {

 

      GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_12))); 

 

      i = 0;

 

    } 

 

  }

 

}

/******************************************************************************************

* 函数名称    :RCC_Configuration

* 功能描述    :

* 参数        :

*

* 返回值      :

* 作者        :

* 创建日期  :2013年5月2日

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

******************************************************************************************/

void RCC_Configuration(void)

{

  /* RCC system reset(for debug purpose) */

    RCC_DeInit();                                             //RCC系统初始化,设为默认值

 

    /* Enable HSE */

    RCC_HSEConfig(RCC_HSE_ON);                                //使能外部晶振(8MHz),关闭旁路

 

    /* Wait till HSE is ready */

    HSEStartUpStatus = RCC_WaitForHSEStartUp();               //等待外部高速时钟稳定

 

    if(HSEStartUpStatus == SUCCESS)                           //时钟就绪成功

    {

        /* Enable Prefetch Buffer */

        /* AHB预分频系数不为1 时,必须置预取缓冲区处于开启状态

           应与闪存存储器的访问时间一起使用

           激活和禁止预取模式时应该在禁止快速时钟时进行(关闭AHB的分频器) */ 

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);     //

    

        /* HCLK = SYSCLK */

        RCC_HCLKConfig(RCC_SYSCLK_Div1);                       //SYSCLK不分频,作为AHB时钟(HCLK,闪存、SRAM等外设时钟设置):36M

  

        /* PCLK2 = HCLK */

        RCC_PCLK2Config(RCC_HCLK_Div1);                        //AHBCLK不分频,作为高速APB(APB2)时钟(PCLK2):36M

        /* PCLK1 = HCLK/2 */

        RCC_PCLK1Config(RCC_HCLK_Div1);                        //AHBCLK二分频,作为低速APB(APB1)时钟(PCLK1):36M

 

        /* ADCCLK = PCLK2/6 */

        RCC_ADCCLKConfig(RCC_PCLK2_Div6);                      //PCLK2 6分频,作为ADC时钟(ADCCLK):6M

 

        /* Flash 2 wait state */ 

        /* (SYSCLK)频率与闪存访问时间的关系:

           0等待周期,当0 < SYSCLK < 24MHz

           1等待周期,当24MHz < SYSCLK ≤ 48MHz

           2等待周期,当48MHz < SYSCLK ≤ 72MHz

        */

        FLASH_SetLatency(FLASH_Latency_1);                     //设置1个等待周期

 

   

    /* PLLCLK = 8MHz/2 * 9 = 36 MHz */

    RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);       //外部时钟2分频后,9倍频(PLL),得36MHz

 

    /* Enable PLL */

    RCC_PLLCmd(ENABLE);                                        //使能PLL电路 

 

    /* Wait till PLL is ready */

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)         //等待PLL电路就绪 

    {

    }

 

    /* Select PLL as system clock source */

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                 //选择PLL倍频时钟作为系统时钟(SYSCLK):36MHz

 

    /* Wait till PLL is used as system clock source */

    while(RCC_GetSYSCLKSource() != 0x08)                       //等待PLL切换成系统时钟源 

    {

    }

    

        

    /* Select HSE as system clock source */

  //  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);                   //选择外部晶振作为系统时钟源(SYSCLK)

    

    /* Wait till HSE is used as system clock source */

 //   while(RCC_GetSYSCLKSource() != 0x04)                      //等待HSE切换成系统时钟源,并作为输出时钟(该时钟可能会有毛刺,仅作调试)

 //  {

 //  }

  }

  

    /* GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、AFIO 时钟使能 */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC

                         | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_AFIO, ENABLE);     

 

 

 

  

    /* USART3 Periph clock enable */

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);        //USART3时钟使能(APB2)

}

 

/******************************************************************************************

* 函数名称    :NVIC_Configuraion

* 功能描述    :

* 参数        :

*

* 返回值      :

* 作者        :

* 创建日期  :2013年5月2日

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

******************************************************************************************/

void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  #ifdef  VECT_TAB_RAM    

          /* Set the Vector Table base location at 0x20000000 */ 

          NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);                      //RAM  

  #else  /* VECT_TAB_FLASH  */  

          /* Set the Vector Table base location at 0x08000000 */ 

          NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);                    //FLASH

  #endif

 

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                  //选择第2组为优先级分组方式:高2位指定抢占优先级,低2位指定响应优先级

 

  /* enabling interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel;             //USART中断

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;           //占先级为0级,最高

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                  //响应级最高0

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                     //启动中断

  NVIC_Init(&NVIC_InitStructure);                                     //初始化嵌套向量中断控制器

}

 

/******************************************************************************************

* 函数名称    :GPIO_Configuration

* 功能描述    :

* 参数        :

*

* 返回值      :

* 作者        :

* 创建日期  :2013年5月2日

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

******************************************************************************************/

void GPIO_Configuration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);    //关掉JTAG,释放PA15,PB3,PB4

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_15;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);       

  

  /* Configure USART3 Tx (PB.10) as alternate function push-pull */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  

  /* Configure USART3 Rx (PB.11) as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOB, &GPIO_InitStructure);                            //RX初始化 

}

 

/******************************************************************************************

* 函数名称    :GPIO_Configuration

* 功能描述    :

* 参数        :

*

* 返回值      :

* 作者        :

* 创建日期  :2013年5月2日

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

******************************************************************************************/

void USART_Configuration(void)

  USART_InitTypeDef USART_InitStructure;

 

  USART_InitStructure.USART_BaudRate = 9600;//波特率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_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流量控制无

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//串口发送和接收模式

 

  /* Configure USART3 basic and asynchronous paramters */

  USART_Init(USART3, &USART_InitStructure);//串口初始化

 

  /* Enable USART3 */

  USART_Cmd(USART3, ENABLE);//指令打开

  /* Enables COM transmit interrupt */

  USART_ITConfig(USART3, USART_IT_TC,ENABLE);//发送中断打开

      

  /* Enables COM receive interrupt */

  USART_ITConfig(USART3, USART_IT_RXNE,ENABLE);//接收中断打开

}

 

void Delay(vu32 nCount)

{

  for(; nCount != 0; nCount--);

}

关键字:stm32  串口中断  接收发送 引用地址:stm32串口中断接收发送实验

上一篇:STM32串口中断的一些资料
下一篇:STM32串口中断接收一个完整的数据帧

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

基于STM32的USB设计
首先,我们来看看usb的工作过程。 当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(device descriptor)、配置描述(configuration descriptor)、接口描述(interface descriptor)、端点描述(endpoint descriptor)等。这些信息是通过端点0(endpoint 0)传送到主机的。获取各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。 usb通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步( synchrono
[单片机]
[I2C应用实例]STM32+BH1750FVI光强检测模块
1.数字光强度检测模块概述: 引脚:VCC GND SCL SDA ADDR 供电电压:3-5V 数据范围:0-65535 传感器内置16bitAD转换器,直接数字输出 不区分环境光源,接近于视觉灵敏度的分光特性,可对广泛的亮度进行1lx的高精度测量 2.光强的检测过程 实则是单片机与模块的通过I2C通信,使用GPIO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL),不用stm32的IIC外设,自己模拟时序,但是还用这两个复用引脚PB10(SCL) PB11(SDA) 。 IIC接口时序图 2877775-c2443e39458eead0.png IIC时序图 写测量指令和读测量
[单片机]
STM32开发 -- 打开网址测试脚本编写
一、CURL软件 1、CURL简介 CURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。 cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。 curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证
[单片机]
<font color='red'>STM32</font>开发 -- 打开网址测试脚本编写
stm32 各头文件或C文件功能
stm32f10x_con.h 配置文件:加载哪个外设、使能assert 对参数进行检查,如果使能了assert 需要在main文件中添加 _assert_faild 函数。 使能assert会增大编译出执行文件的大小,调试完后可以将assert 屏蔽。 stm32f10x.h头文件中包含了stm32f10x_conf.h 。 stm32f10x.h 1、对所有的外设的地址进行映射,映射到存储区,即定义某外设结构体变量,因为结构体是连续存储的只要将外设的基地址强制转换为结构体类型的指针,那么该外设的寄存器就可以通过指针进行访问,以GPIO为例: 定义外设的结构体,结构体变量都是volatile类型,告诉编译器不
[单片机]
STM32外部中断处理流程及注意事项
STM32的外部中断是以组为单位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中断0,我们再使用时从中选择一个座位外部中断0即可,其他中断类推。 外部中断包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自独立的中断, Pin5--Pin9共用一个中断,Pin10--Pin15共用一个中断。 中断号 Pin脚 EXTI0 Pin0 EXTI1 Pin1 EXTI2 Pin2 EXTI3 Pin3 EXTI4 Pin4 EXTI9_5 Pin5--Pin9 EXTI15_10 Pin10--Pin15 外部中
[单片机]
STM32微控制器的可靠串口通信技术研究
引言 STM32F107微控制器是意法半导体推出的高性能32位以CortexM3为内核的面向工业控制的处理器。该处理器内部通过一个多层的AHB总线构架相连,其内部集成了丰富的外设,如USART、SPI、ADC等等。另外,STM32F107处理器还提供多达80个通用I/O接口,如此丰富的资源使STM32系列微控制器能够很理想地用于工业控制。本文设计出一种基于STM32F107的可靠串口通信设计方案,可以完成STM32F107处理器和PC机以及其他串口之间的可靠通信 。 1 串口通信的实现 1.1 硬件设计 STM32F107处理器的通用同步异步通信单元(USART)提供 5个独立的异步串行接口,并且都能工作在中断和DMA模式
[单片机]
<font color='red'>STM32</font>微控制器的可靠<font color='red'>串口</font>通信技术研究
学习STM32必须了解的五大嵌入式操作系统
基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和rt-thread。下面分别介绍这五种嵌入式操作系统的特点及不足,通过对比,读者可以根据自己的应用需求选择合适的平台。 TOP1:μClinux μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内
[单片机]
在CPLD管理下实现高效多串口中断
摘要:针对嵌入式系统的精简特性,提出一种通过1个中断源高效管理多个串行口的有效方法,不但节省系统资源,而且实现了多个串行口中断的无漏检测与服务。 关键词:嵌入式系统 RS232 多串口 CPLD 中断 近几年来,随着后PC时代的来临,具有简洁、高效等特点的嵌入式系统得到了飞速的发展。嵌入式技术发展到今天已将各种计算机技术多层次、多方面的交叉融合在了一起。嵌入式系统加快了工业设计进程,降低了开发成本及其风险,使用简便,扩展灵活,高效精简,可方便地应用于各工业领域。 中断请求采用边沿触发来进行中断检测,通过将信号送到特定的引线来检测中断。每条引线对应一个可能的硬件中断,因为系统不能辨认哪个设备使用中断线,所以当多个1个的设备被设置成使用
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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