STM32F429之四:UART

发布者:雅意盎然最新更新时间:2019-07-22 来源: eefocus关键字:STM32F429  UART  初始化设置 手机看文章 扫描二维码
随时随地手机看文章


void uart_init(u32 bound)

{

//UART 初始化设置

UART1_Handler.Instance=USART1;     //USART1

UART1_Handler.Init.BaudRate=bound;     //波特率

UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式

UART1_Handler.Init.StopBits=UART_STOPBITS_1;     //一个停止位

UART1_Handler.Init.Parity=UART_PARITY_NONE;     //无奇偶校验位

UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控

UART1_Handler.Init.Mode=UART_MODE_TX_RX;     //收发模式

HAL_UART_Init(&UART1_Handler);     //HAL_UART_Init()会使能UART1

HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量

  

}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

    //GPIO端口设置

GPIO_InitTypeDef GPIO_Initure;

if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化

{

__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟

__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟

GPIO_Initure.Pin=GPIO_PIN_9; //PA9

GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出

GPIO_Initure.Pull=GPIO_PULLUP; //上拉

GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速

GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1

HAL_GPIO_Init(GPIOA,&GPIO_Initure);     //初始化PA9

 

GPIO_Initure.Pin=GPIO_PIN_10; //PA10

HAL_GPIO_Init(GPIOA,&GPIO_Initure);     //初始化PA10

#if EN_USART1_RX

HAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中断通道

HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级3,子优先级3

#endif

}

}

void USART1_IRQHandler(void)               

u8 Res;

#if SYSTEM_SUPPORT_OS //使用OS

OSIntEnter();    

#endif

if((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)!=RESET))  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

{

        HAL_UART_Receive(&UART1_Handler,&Res,1,1000); 

if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

else USART_RX_STA|=0x8000; //接收完成了 

}

else //还没收到0X0D

{

if(Res==0x0d)USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收   

}  

}

}     

}

HAL_UART_IRQHandler(&UART1_Handler);

#if SYSTEM_SUPPORT_OS //使用OS

OSIntExit();   

#endif

}


关键字:STM32F429  UART  初始化设置 引用地址:STM32F429之四:UART

上一篇:STM32串口通信配置(USART1+USART2+USART3+UART4)
下一篇:STM32F工程移植注意事项

推荐阅读最新更新时间:2024-11-12 19:04

51单片机串口通讯uart笔记
我需要设计一个夜晚蓝牙开关灯设计,采用的蓝牙芯片为JDY-30,刚开始不知道具体型号,后来连接蓝牙之后发现是JDY-30,查手册发现采用的是uart通讯,所以就进行了重新的温习。下面是uart串口通讯的笔记 使用串口通讯需要对相关寄存器进行配置 我这里需要将串口通讯工作在中断方式,那我肯定要用到中断有关的寄存器IE 还需要设置定时/计数器T1,可能有人会有疑问,为什么要用定时器呢,波特率是每秒传输二进制代码的位数,单位是 位/秒 即bps 而定时器是用来确定发送和发送执行每一位的时间的,所以需要对TCON与TMOD寄存器进行配置 使用串行通讯的话还需要确定串行通信的工作方式与控制功能,这就需要对SCON与PCON寄存器
[单片机]
51单片机串口通讯<font color='red'>uart</font>笔记
STM32F429--中断应用概览
01 异常类型 02 NVIC简介 03 优先级的定义 04 中断编程(顺序,寄存器) STM32的中断非常强大,STM32每个外设可以产生中断,可粗略认为,异常就是中断,中断就是异常。 一: 1.系统异常,体现在内核水平 -3~6 2.外部中断,体现在外设水平 二: 1- 嵌套向量中断控制器 NVIC ,用来控制这么多的外设中断 Nested vectored interrupt controller 两个重要的库文件:core_cm4.h和misc.h 2- 中断 中断使能寄存器 中断清除寄存器 中断使能悬起寄存器 中断清除悬起寄存器 中断有效位寄存器 中断优先级寄存器(8Bit wide) 软件触
[单片机]
STM32F103 UART4 DMA接收
//网上找了老半天也找不到UART4-DMA的程序,自己调试成功了,特地分享一下 /pre pre name= code class= cpp pre name= code class= cpp uint8_t UART4_Rx_buffer ,UART4_Rx_num; void UART4_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; DMA_InitTypeDef DMA_InitStruct
[单片机]
TQ2440 学习笔记—— 23、通用异步收发器 UART
通用异步收发器 UART UART(Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置)用于异步通信,可以实现全双工发送和接收。最精简的连线方法只有三根电线:TxD 用于发送数据,RxD 用于接收数据,Gnd 用于给双方提供参考电平。 UART 使用的标准的TTL/CMOS 逻辑电平(0 - 5V、0 - 3.3V 等)来表示数据,高电平表示1,低电平表示0.为了增强数据的抗干扰能力、提高传输长度,通常是将TTL/CMOS 逻辑电平 转换为 RS-232 逻辑电平, 3 ~ 12V 表示0,-3 ~ -12V 表示1。 PC 使用串口: 1、确
[单片机]
NXP lpc11xx M0 UART程序详细注释
最实用UART 程序 有相关注释, 主要用于调试!! 看啦些许日子的 , 没见有人发,今天就给大家发个调试用的 UART 的程序 , 至于接收函数 , 论坛里的朋友可以自己做更改 改为 接收字节 可以控制的那种也行, 因为实用的关系, 看看还有什么东西可以调下的, 共同交流 感觉交流的不是很多的那种, 是什么原因有待。。。。。 程序简单, 共同交流 !! 大部分的都是源程序使用的, NXP弄的例程 都是标准的那种!! #include "LPC11xx.h" //芯片头文件 #include "uart.h" //串口头文件 #
[单片机]
STM32_DMA 标准初始化设置解释
DMA 全称是:Direct Memory Access;根据 ST 公司提供的相关信息,DMA是STM32中一个独立于 Cortex-M3 内核的模块,有点类似于 ADC、PWM、TIMER 等模块;主要功能是起通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速访问各寄存器,其传输不受 CPU 的支配,传输还是双向的;例如,从“表面”上看,它可以将 flash 中的数据与储存器中变量建立通讯,还可以将某一个外设的寄存器或缓冲器与另一个外设的寄存器或缓冲器建立双向通讯,有点像把外设硬件之间用“导线”连接在一起了。其间的通讯不占 CPU 资源,访问速度快,对于实时性强的应用将是一个很好的选择。下面代码是一个标
[单片机]
STM8串口UART2_SendData8函数连续发送数据丢失
1、STM8用UART2_SendData8(uint8_t Data)函数发送数据时,数据会丢失,因为库函数没有判读是否发送完成; 2、寄存器修改如下: void UART2_SendData8(uint8_t Data) { /* Transmit Data */ unsigned int max_delay =0; UART2- DR = Data; while(1) { if((UART2- SR &0X40) != 0)break; max_delay++; if(max_delay 10000)break; } } 2、库函数修改如下
[单片机]
STM8串口<font color='red'>UART</font>2_SendData8函数连续发送数据丢失
STM8开发记录二:UART RX空闲中断和DMA操作
一、用STM8L的时候,没能在同时读取Rx中断和IDLE中断标志,最后用DMA取数据,见 (三、DMA实现数据拷贝): 1.1 uart配置 void UsartConfig(void) { // USART_DeInit(USART1); /* Enable USART clock */ CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); /* USART pin remap */ SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortA, ENABLE); /* Configure USART
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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