STM32 UART的使用过程

发布者:鑫森淼焱最新更新时间:2016-09-27 来源: eefocus关键字:STM32  UART  使用过程 手机看文章 扫描二维码
随时随地手机看文章
1、使用UART前必须启动相应的外设时钟,其主要用到固件库的RCC_APBnPeriphClockCmd函数。
使能UART1:使用RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)
使能UART2:使用RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE)
2、使用中断进行UART操作的需要配置NVIC,设置中断优先级。如:
 /* Configure the NVIC Preemption Priority Bits */  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  
  /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

3、配置相应的GPIO口。
   如果系统的UART需要进行重映射,需要使用GPIO_PinRemapConfig函数进行重映射,如:GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//注意:Rx为浮空,Tx为第二功能上拉。
   将Rx配置为:浮空输入模式,Tx配置为带上拉的第二功模式。并用GPIO_Init() 函数初始化。如:
  /* Configure USART2 Rx PA3 input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure USART1 Tx (PA.09) as alternate push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
4、配置UART
  当在conf文件种配置正确的外晶振后,在USART_InitTypeDef定义的结构体种直接写入UART的波特率、通讯长顿、模式、硬件通讯控制,收发模式。再用USART_Init()进行初始化。如:
  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_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* Configure USART1 */
  USART_Init(USART1, &USART_InitStructure);
 
  而后使能收发中断。如:
  /* Enable USART1 Receive and Transmit interrupts */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
//         USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
   注意:一般不将TXE中断使能。因为一旦将此中断使能,如果UART发送缓冲区空,则会立即进入UART中断中,因此可在程序中需要发送数据处,使能TXE中断。在UART中断种用USART_SendData()来发送数据。
    完成中断使能后,还需要使能UART口:
 如:
  /* Enable the USART1 */
  USART_Cmd(USART1, ENABLE);
  /* Enable the USART2 */
  USART_Cmd(USART2, ENABLE);

中断程序(stm32f10x_it.c)可以如下完成发送:注意所有的的串口中断需要在中断服务程序中判断中断源以分别处理。
void USART1_IRQHandler(void)
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer1[RxCounter1++] = USART_ReceiveData(USART1);      
    if(RxCounter1 == NbrOfDataToRead1)
    {
      USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//发送完成后,将RXNE禁止。
    }
  }
  
  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  {   
    USART_SendData(USART1, TxBuffer1[TxCounter1++]);                    
    if(TxCounter1 == NbrOfDataToTransfer1)
    {
      USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
    }    
  }
}
关键字:STM32  UART  使用过程 引用地址:STM32 UART的使用过程

上一篇:stm32驱动12864液晶显示程序
下一篇:STM32之RCC

推荐阅读最新更新时间:2024-03-16 15:12

MSP430F169(二)——UART中断(论下)
1. UART中断工作的机制 UART只有一个发送中断向量和一个接收中断向量,通过判断中断向量的标志来控制数据的收发 1.1 发送机制 当用户想发送数据时,UxIFG产生一个中断,表明UxTXBUF已经准备好接收数据。当UxTXBUF接收字符后或中断被执行,URXIFG将会复位。 SWRST = 1或PUC会置位UxIFG (SWRST: 系统复位) SWRST = 1或PUC会复位UxIE 1.2接收机制 UxRXBUF每次接收一个字符并加载时,URXIFGx会产生一个中断标记 UxRXBUF被读取时或中断被执行时,URXIFG被自动复位 当PUC或SWRST = 1时UxRXIE 复位 建议接收中断函数的代码要精简,执
[单片机]
USB自定义HID设备实现-STM32
该文档使用USB固件库,在其基础上进行了自己的定制,完成了一个USB-HID设备,首先是usb_desc.c文件,里面存放了usb各种描述符的存在 #include usb_desc.h //usb标准设备描述符 const u8 DinkUsbDeviceDescriptor = { USB_DEVICE_DESC_SIZE, //bLength字段。设备描述符的长度为18(0x12)字节 USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType字段。设备描述符的编号为0x01 WBVAL(0x0200), //bcdUSB字段。这
[单片机]
STM32局部变量的数组最大能到多少?
当在一个函数中声明一个较大的局部数组变量时,程序可以编译通过,但运行时,老是进入hardfaulthandler,导致出现改问题的原因可能是栈溢出。因为局部变量是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小,会产生溢出。 解决这种问题的方法: 方法1:启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。将启动文件下的堆栈改大 Stack_Size EQU 0x00000400 。 Stack Size,一般小工程0X400足够,大工程才设置0X1000就够用,所以默认无需设置太大。 方法2:用静态数组代替普通局部数组。 方法3:数组过大,栈溢出了,有可能覆盖了其他全局变量的值
[单片机]
STM32的FSMC灵活静态存储器控制器
  FSMC(Flexihie Static Memory Controller)模块只适用于大容量产品。   FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,主要将AHB传输信号转换到适当的外部设备协议,满足访问外部设备的时序要求。   存储器接口包括:   ① SRAM静态随机存储器   ② ROM只读存储器   ③ NOR闪存   ④ PSRAM(4个存储块)   ⑤ 两个NAND闪存块   ⑥ 16位PC卡   STM32之所以能够支持NOR FLASH和NAND FLASH两类访问方式完全不同的存储器扩展,是因为FSMC内部实际包括NOR FLASH和NAND / PC Card两个控制器,分别
[单片机]
<font color='red'>STM32</font>的FSMC灵活静态存储器控制器
STM32标准外设库SPL转换成Cube LL
今天分享几点内容: 1.介绍ST推出的三种库; 2.直接操作寄存器及三种ST库的代码性能对比; 3.STM32CubeMX直接生成Cube LL库函数的方法; 4.STM32标准外设库SPL转换成Cube LL的方法; 1介绍ST推出的三种库 1.标准外设库:Standard Peripheral Libraries,简写SPL. 2.Cube硬件抽象层库:STM32Cube Hardware Abstraction Layer,简写Cube HAL. 3.Cube底层库:STM32Cube Low-Layer,简写Cube LL. 开发STM32常见的除了直接读写(操作)寄存器之外,就是使用ST推
[单片机]
<font color='red'>STM32</font>标准外设库SPL转换成Cube LL
STM32】NVIC寄存器组
在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 一、NVIC寄存器组 STM32的固件库中有如下定义: typedef struct { vu32 ISER ; u32 RESERVED0 ; vu32 ICER ; u32 RSERVED1 ; vu32 ISPR ; u32 RESERVED2 ; vu32 ICPR ; u32 RESERVED3 ; vu32 IABR ; u32 RESERVED4 ; vu32 IPR ; } NVIC_TypeDef; 它们对应ARM手册中的名称为 ISER = Interrupt Set-En
[单片机]
STM32应用案例 基于STM32F103ZE开发的数码相册
1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡、外扩Sram 2.示例效果 SD卡检测和图片搜索 图片加载与显示 3.软件设计 3.1 遍历目录   遍历目录,搜索所有的bmp格式图片,以链表方式保存图片名,方便接下来图片切换。 typedef struct FILE_info { char file_name ; u16 number;//保存第几张图片 struct FILE_info *next; struct FILE_info *pre; }FILE_INFO; FILE_INFO *bmp_head=NULL; /*创
[单片机]
<font color='red'>STM32</font>应用案例 基于STM32F103ZE开发的数码相册
如何利用定时器产生PWM波
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用定时器产生PWM波
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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