STM32F030 USART2配置函数 波特率不对导致无法进入中断

发布者:WhisperingWaves最新更新时间:2018-07-10 来源: eefocus关键字:STM32F030  USART2  配置函数  波特率 手机看文章 扫描二维码
随时随地手机看文章

今天调试STM32F030 USART2,收发不了数据,仿真的时候进入不了中断,但是配置也是正确的。搞了很久,原因是先初始化的串口再初始化Flash数据,导致读入的波特率是0,进而无法正常使用USART2,浪费了大量的时间,血的教训呀。


void UartIntial(void){

int i;

GPIO_InitTypeDef   GPIO_uInitStructure;

USART_InitTypeDef  USART_uInitStructure;

NVIC_InitTypeDef NVIC_InitStructure; 

 

for(i=0; i

memset((unsigned char*)&uart[i], 0x00, sizeof(struct UartApiBuf));

uart[i].Snd.IsSndIng = FALSE;

uart[i].Snd.IsRcvIng = FALSE;

uart[i].Snd.lpChar = 0;

uart[i].Snd.lpIdle = 0;

uart[i].Rcv.IsSndIng = FALSE;

uart[i].Rcv.IsRcvIng = FALSE;

uart[i].Rcv.lpChar = 0;

uart[i].Rcv.lpIdle = 0;

}

 

 

// USART2_EN -> PA0 

// USART2_TX -> PA2 

  // USART2_RX -> PA3

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);

GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;

GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP;  

GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 50M

GPIO_Init(GPIOA,&GPIO_uInitStructure);

 

GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP;  

GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 50M

GPIO_Init(GPIOA,&GPIO_uInitStructure);

GPIO_ResetBits(GPIOA, GPIO_Pin_0);

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

USART_uInitStructure.USART_BaudRate = s.Baud;

USART_uInitStructure.USART_Parity = USART_Parity_No;

USART_uInitStructure.USART_StopBits = USART_StopBits_1;

USART_uInitStructure.USART_WordLength = USART_WordLength_8b;

USART_uInitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_uInitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_Init(USART2,&USART_uInitStructure);

USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);

  USART_Cmd(USART2,ENABLE);

}


关键字:STM32F030  USART2  配置函数  波特率 引用地址:STM32F030 USART2配置函数 波特率不对导致无法进入中断

上一篇:STM32关于操作内部FLASH整理
下一篇:STM32F030 Nucleo-多样的SPI通信之Master标准模式-SPIFlash读写

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

具有波特率自适应功能的无线数据传输模块设计
1 模块总体结构 基于nRF401无线数据传输器件的数传模块总体硬件结构如图1所示,主要由微控制器和蓝牙芯片及其相应的外围电路组成,能自动完成波特率识别,并进行数据的编码处理,给用户提供了一个透明的数据接口。微控制器选用Atmel公司推出的可在线编程的单片机AT89S51,便于以后软件的升级。通过对发送数据是否需要曼彻斯特编码、所需外围元件的数量、功耗及发射功率等方面的因素综合比较,选用nRF40l作为无线数传器件。 nRF401是单片无线收发器件,采用蓝牙核心技术设计,内部集成高频发射、高频接收、PLL合成、FSK调制、FSK解调、多频道切换等诸多功能和外围部件协议,是目前集成度最高的无线数传产品,也是唯一可以直接连接微控制
[网络通信]
STM32中如何计算波特率
波特率的计算 STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下: STM32串口波特率通过USART_BRR进行设置,STM32的波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不是我们想要设置的波特率,想要设置我们串口的波特率大小还需要进行计算。其实有关波特率的计算是下面这一条表达式: 从上面的表达式,我们引入了一个新量USARTDIV,它表示对串口的时钟源fck进行分频。假设我们已知道了波特率和fck时钟频率的大小,那么通过上式便可
[单片机]
STM32中如何计算<font color='red'>波特率</font>
12M晶振下,STM32串口波特率设置问题
使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。 第一步,打开stm32f10x.h,将 #define HSE_VALUE ((uint32_t)8000000) 修改为: #define HSE_VALUE ((uint32_t)12000000) 第二步,打开system_stm32f10x.c,
[单片机]
hi3531串口波特率计算
波特率配置 通过配置寄存器UART_IBRD 和UART_FBRD 可以设置UART 工作的波特率,波特率 计算公式为: 当前波特率=UART 参考时钟频率(1/2 总线时钟频率)/(16 x 分频系数) 分频系数有整数和小数两部分组成,分别对应寄存器UART_IBRD 和UART_FBRD。 例如:UART 参考时钟频率为60MHz,如果配置UART_IBRD 为0x1E,UART_FBRD 为0x00,按照波特率计算公式,则当前的波特率为60/(16 x 30)=0.125Mbit/s。 UART 波特率配置的典型值为:9,600bit/s、14,400bit/s、19,200bit/s、38,400bit/s、 57,600
[单片机]
STM32F030控制LED
(1)hardware_conf.h函数中: #define NETLED(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 4):(GPIOA- ODR&(~(1 4))) //上网指示灯 #define DOORLED(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 12):(GPIOA- ODR&(~(1 12))) //开门指示灯 #define MENCI(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 11):(GPIOA- ODR&(~(1 11))) //门磁指示灯 (2)main函数中: void main(void) { NE
[单片机]
RS232C信号特性、电缆长度及波特率
  为了确保正确地发送二进制数据和正确地执行设备控制,RS232C标准为数据和管制信号提供了电压标准及范围。当RS232C的线路上没有通信的数据信号时,DTE端的发送信号保持-15V的电压。电压标准如表所示。   RS232C标准规定电缆长度限定在15m以内,串行数据传速率的范围为0~20000b/s。这一规定足以覆盖个人计算机使用的50~9 600b/s范围。电缆长度也足以满足大多数个人计算机通信的要求。RS232C的电气接口是单端、双极性电源供电电路,两个传输方向共用一根信号地线,接口使用不平衡收发器,可能在各种信号成分间产生干扰。   德阳四星电子技术开发中心的RS232光隔离长线收发器(又名:串口泵),将RS2
[嵌入式]
高级外设CAN之波特率计算
在做技术支持的时候,经常接到这样的客户电话, 在使用开发板上的CAN通信时,VPB时钟为和光盘例程里的不一样,CAN波特率怎么设置?我们希望用到的CAN波特率有5K、10K、50K、500K、1000K等 。CAN波特率设置不正确将导致CAN无法通信,于是,就波特率计算的方法我写了这篇文章,以后再有客户问这类问题,便可以直接把这篇文章发给客户。 CAN波特率的计算公式如下: 其中tcan是CAN系统时钟的一个周期,tbit是一个CAN位周期。 以VPB时钟Fpclk=24MHz,选择采样点位置在85%左右为佳,即使TESG1/(TESG1+TESG2)在85%左右,2 TESG1 15,1 TESG2 7,由
[单片机]
stm32库函数在gcc下的开发环境配置完成
_# 我从github上下载了libopencm3的源码,编译的时候报错: GENHDR efm32/efm32g/irq.json :没有那个文件或目录 make【1】:*** 错误127 请问如何解决**___ 以下为Makefile文件: ## ## This file is part of the libopencm3 project. ## ## Copyright (C) 2009 Uwe Hermann ## ## This library is free software: you can redistribute it and/or modify ## it under the terms of the GNU
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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