STM32 库函数处理 串口的例程

发布者:心愿实现最新更新时间:2024-10-08 来源: elecfans关键字:STM32  串口 手机看文章 扫描二维码
随时随地手机看文章

stm32使用库函数编写USART还是很方便的,现在转几个例子:

首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=524


// STM32 USART1 (Tx PA.9, Rx PA.10) STM32F3-Discovery - sourcer32@gmail.com  

   

#include 'stm32f30x.h'  

   

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

    

void RCC_Configuration(void)  

{  

  /* Enable GPIO clock */  

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  

   

  /* Enable USART clock */  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  

}  

   

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

    

void GPIO_Configuration(void)  

{  

  GPIO_InitTypeDef GPIO_InitStructure;  

   

  /* Connect PA9 to USART1_Tx */  

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);  

   

  /* Connect PA10 to USART1_Rx */  

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);  

   

  /* Configure USART Tx as alternate function push-pull */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

   

  /* Configure USART Rx as alternate function push-pull */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

}  

   

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

   

void USART1_Configuration(void)  

{  

  USART_InitTypeDef USART_InitStructure;  

   

  /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/  

  /* USART configured as follow: 

        - BaudRate = 115200 baud 

        - Word Length = 8 Bits 

        - One Stop Bit 

        - No parity 

        - Hardware flow control disabled (RTS and CTS signals) 

        - Receive and transmit enabled 

  */  

  USART_InitStructure.USART_BaudRate = 115200;  

  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;  

   

  /* USART configuration */  

  USART_Init(USART1, &USART_InitStructure);  

   

  /* Enable USART */  

  USART_Cmd(USART1, ENABLE);  

}  

   

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

   

int main(void)  

{  

  RCC_Configuration();  

    

  GPIO_Configuration();  

    

  USART1_Configuration();  

    

  while(1)  

  {  

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // Wait for Empty  

    

    USART_SendData(USART1, 0x49); // Send 'I'  

  }  

    

  while(1); // Don't want to exit  

}  

   

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

   

#ifdef  USE_FULL_ASSERT  

   

/** 

  * @brief  Reports the name of the source file and the source line number 

  *         where the assert_param error has occurred. 

  * @param  file: pointer to the source file name 

  * @param  line: assert_param error line source number 

  * @retval None 

  */  

void assert_failed(uint8_t* file, uint32_t line)  

{  

  /* User can add his own implementation to report the file name and line number, 

     ex: printf('Wrong parameters value: file %s on line %drn', file, line) */  

   

  /* Infinite loop */  

  while (1)  

  {  

  }  

}  

#endif  


接下来是使用中断的方法,使用USART3,管脚pd8,pd9,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/STM32F4%20USART%20receive%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=124


// STM32 USART IRQ TX/RX Loop (USART3 Tx PD.8, Rx PD.9) STM32F4 Discovery - sourcer32@gmail.com  

   

#include 'stm32f4_discovery.h'  

   

volatile char StringLoop[] = 'The quick brown fox jumps over the lazy dogrn';  

   

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

   

void RCC_Configuration(void)  

{  

  /* --------------------------- System Clocks Configuration -----------------*/  

  /* USART3 clock enable */  

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);  

   

  /* GPIOD clock enable */  

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);  

}  

   

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

   

void GPIO_Configuration(void)  

{  

  GPIO_InitTypeDef GPIO_InitStructure;  

   

  /*-------------------------- GPIO Configuration ----------------------------*/  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  GPIO_Init(GPIOD, &GPIO_InitStructure);  

   

  /* Connect USART pins to AF */  

  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3);  

  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3);  

}  

   

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

   

void USART3_Configuration(void)  

{  

    USART_InitTypeDef USART_InitStructure;  

   

  /* USARTx configuration ------------------------------------------------------*/  

  /* USARTx configured as follow: 

        - BaudRate = 9600 baud 

        - Word Length = 8 Bits 

        - One Stop Bit 

        - No parity 

        - Hardware flow control disabled (RTS and CTS signals) 

        - Receive and transmit enabled 

  */  

  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;  

   

  USART_Init(USART3, &USART_InitStructure);  

   

  USART_Cmd(USART3, ENABLE);  

  

 USART_ITConfig(USART3, USART_IT_TXE, ENABLE);  

  

 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  

}  

   

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

   

void NVIC_Configuration(void)  

{  

  NVIC_InitTypeDef NVIC_InitStructure;  

   

  /* Configure the NVIC Preemption Priority Bits */  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  

   

  /* Enable the USART3 Interrupt */  

  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;  

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  NVIC_Init(&NVIC_InitStructure);  

}  

   

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

   

void USART3_IRQHandler(void)  

{  

  static int tx_index = 0;  

  static int rx_index = 0;  

   

  if (USART_GetITStatus(USART3, USART_IT_TXE) != RESET) // Transmit the string in a loop  

[1] [2]
关键字:STM32  串口 引用地址:STM32 库函数处理 串口的例程

上一篇:stm32变更外部晶振时时钟配置
下一篇:STM32的SRAM调试

推荐阅读最新更新时间:2024-11-11 11:16

Stm32矩阵键盘扫描程序分析
我们知道在51单片机中,通过扫描某个口的电平高低得知那个按键按下,比如,控制两行4列, 假如让P1=0xCf;低位都置1 (pb0-pb3),pb4-pb5置0;然后我们就扫描P1口就行了,如果有按键被按下的,高电平会被强制拉低的。 假如按键返回的值为0xce,可知是pb0被拉低了,由此可判断是S1或者S2按下了,其他的同理。 当然只让P1=0xcf,是不能判断出具体的按键是哪个的,此时,如果我们取反既P1=0x30; 当按键返回值为0x10时,我们可得知01 0000,pb5=0,s1或者s2被按下,这个时候我们将0xce|0x10=0xde,就是唯一的值了。以此类推,得出其他的值来。 在stm32中是同样的大道
[单片机]
<font color='red'>Stm32</font>矩阵键盘扫描程序分析
STM32固件库实现点亮LED
前言 使用固件库点亮LED 提示:以下是本篇文章正文内容 一、原理图 二、软件设计 在工程之上新建“bsp_led.c”及“bsp_led.h”文件,这些文件不属于STM32 标准库的内容,是由我们自己根据应用需要编写的,编程步骤如下: 使能 GPIO 端口时钟; 初始化 GPIO 目标引脚为推挽输出模式; 编写简单测试程序,控制 GPIO 引脚输出高、低电平 三、代码 1.LED 灯引脚宏定义 在编写应用程序的过程中,要考虑更改硬件环境的情况,即提高可移植性。 这个时候一般把硬件相关的部分使用宏来封装,若更改了硬件环境,只修改这些硬件相关的宏即可,这 些定义一般存储在头文件,即本例子中的“bsp_led.h”
[单片机]
<font color='red'>STM32</font>固件库实现点亮LED
STM32 定时器中断配置心得【自用】
1.IO配置 略 2.TIM配置 void TIM2_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period =359999; TIM_TimeBaseStructure.TIM_Prescaler = 99; TIM_TimeBas
[单片机]
STM32—IIC通信(软件实现底层函数)
使用GPIO引脚模拟SDA和SCL总线实现软件模拟IIC通信,IIC的具体通信协议层和物理层链接:IIC #ifndef __BSP_IIC_H #define __BSP_IIC_H #include stm32f10x.h #define SCL_PORT GPIOA #define SCL_PIN GPIO_Pin_2 #define SCL_MOOD GPIO_Mode_Out_OD #define SCL_SPEED GPIO_Speed_50MHz #define SDA_PORT GPIOA #define SDA_PIN GPIO_Pin_3 #defi
[单片机]
stm32定时器误区
在用到STM32定时器的更新中断时,发现有些情形下只要开启定时器就立即进入一次中断。准确说,只要使能更新中断允许位就立即响应一次更新中断【当然前提是相关NVIC也已经配置好】。换言之,只要使能了相关定时器更新中断,不管你定时间隔多长甚至不在乎你是否启动了相关定时器,它都会立即进入一次定时器更新中断服务程序。 以STM32F051芯片为例,做了几种不同顺序的组合测试。根据测试发现,的确有些情况下一运行TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); 【即使能更新中断】就立即进入更新中断服务程序。当然后面的中断都是正常的。 老实说,这个问题比较容易忽视,有些情况下也无关紧要,但有些情况可能会给应
[单片机]
<font color='red'>stm32</font>定时器误区
STM32 串口中断设置
我们基于之前的串口配置的那篇文章 来完成今天使用串口中断来控制led 灯的亮灭 首先我们要知道为什么要使用中断 使用中断 能高效的去执行程序,不会一直占用MCU的资源。 对于中断的介绍 可以看我之前关于中断的那篇文章 开始进入正题 我们如何配置串口中断 由于之前我们已经在user 这个文件夹下添加过这个文件了 所以我们直接在配置串口的那一个文件下 进行配置 首先 我们先配置 NVIC_InitTypeDef 这个结构体 uint8_t NVIC_IRQChannel; 中断分组 uint8_t NVIC_IRQChannelPreemptionPriority 抢占优先级 uint8_t NVIC_IRQChannel
[单片机]
MSP430程序库UART异步串口
硬件介绍: MSP单片机的USART模块可以配置成SPI(同步通信)模式或UART(异步通信)模式,这里只讨论UART方式。UART数据传输格式如下: 起始位,数据位由高到低7/8位,地址位 0/1位,奇偶校验位 奇偶或无,停止位1/2位。数据位位数、地址位、奇偶校验位、停止位均可由单片机内部寄存器控制;这两款单片机都有两个USART模块,有两套独立的寄存器组;以下寄存器命中出现x代表0或是1,0代表对应0模块的寄存器,1代表对应1模块的寄存器;其中,与串口模式设置相关的控制位都位于UxCTL寄存器,与接收相关的控制位都位于UxRCTL寄存器,与发送相关的控制位都位于UxTCTL寄存器;波特率设置用UxBR0、UxBR1、U
[单片机]
MSP430程序库UART异步<font color='red'>串口</font>
STM32入门编程总结4 (中断+串口
系统异常中断与外部中断统称为中断,复位中断的优先级最高, NVIC(NestedVectored Interrupt Controller)嵌套向量中断控制器,调整各个中断的优先级,中断优先级 =抢占优先级(1-4bit)+子优先级(0、1)如果两个中断的抢占优先级与子优先级参数一致,则按照中断向量表里的顺序区分优先级。GPIO的中断,EXTI(External interrupt/event controller)外部中断/事件(event)控制器,外部中断为用户自定义中断内容(用户编写程序发生中断后要干啥事儿),外部事件为具体对应外设自动执行,EXTI 0-15总共16个,GPIO A-G当中的pin尾数与EXTI尾数对应
[单片机]
<font color='red'>STM32</font>入门编程总结4 (中断+<font color='red'>串口</font>)
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved