STM32串口通信(一)

发布者:平安宁静最新更新时间:2019-09-05 来源: eefocus关键字:stm32  串口通信  UART2  TTL 手机看文章 扫描二维码
随时随地手机看文章

关于STM32串口通信USART的一些个人浅见:


1:对STM32中文数据手册解读之后,相信大家对USART串行通信有些了解,学习51的时候也都接触过,使用串口只要弄明白原理就很简单了


发送和接收数据的过程从图上可以直观的看出

USART串口通信涉及到几个重要的寄存器


 1:)状态寄存器

2)数据寄存器


 

3)波特比率寄存器


 

例:若要设置比特率为9600,那么DIV就是468.75,则此寄存器的高12位应存值:468,低4位存值:0.75*16=12(十进制小数换算成十六进制小数);最后将整数和小数拼接:BRR=468<<4+12;(详细过程可参照源代码;)


4)控制寄存器1:

5)控制寄存器2:


主要配置停止位,时钟极性,时钟使能


6)控制寄存器3:


 涉及到硬件流控制,DMA配置等


发送数据:

接收数据:

相关程序:


中断函数:


void USART1_IRQHandler(void)

 {

        static u8 ch; 

        USART_ClearFlag(USART1 , USART_FLAG_TC);  


if(USART_GetITStatus(USART1, USART_IT_RXNE) != Bit_RESET)

{


       ch=USART_ReceiveData(USART1);

            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == Bit_RESET);                                                        USART_SendData(USART1, ch);     

            while(USART_GetFlagStatus(USART1, USART_FLAG_TC));   

}

 }

主程序:


int main()

{

 usart_init();

  while(1);

}


配置程序:


void usart_init()

{


  GPIO_InitTypeDef  GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;

  USART_DeInit(USART1);


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);  



 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); 


 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;         

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);


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_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);


USART_Cmd(USART1, ENABLE);    


USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);   


USART_ClearFlag(USART1,USART_FLAG_TC);

 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 


 NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;

 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

 NVIC_Init(&NVIC_InitStructure); 

}


(以上内容均为个人浅见,如有不恰之处,请指正,谢谢!)

关键字:stm32  串口通信  UART2  TTL 引用地址:STM32串口通信(一)

上一篇:STM32输入捕获(一)
下一篇:STM32外部中断笔记(一)

推荐阅读最新更新时间:2024-11-12 18:37

基于STM32Uart2串口问题
买了一块1元的活动板子,移植了RTT(RT-THREAD)的国人嵌入式操作系统。系统能够正常跑起来,接着就按照RTT的官网教程,写了一个串口驱动。 原来定义的是UART1的端口,但是没有找到板子的USART1的引脚,虽然STM32可以映射,但是仍然没有看到有甩出来的引脚。初略看了一下官网的使用手册,发现图上有USART2引出来。 上图看一下, 好家伙,那就直接接地,接TX与RX到PC端的USB转串口吧。 杯具来了,发现无论如何自己的程序都没有输出打印,怀疑自己的代码有问题。用mbed的示例BIN文件试试,也发现不行。难道是电平问题?换了别人使用的开发板与PC的USB转串口,oh mygod!!还是不行。 心灰意冷,
[单片机]
基于<font color='red'>STM32</font>的<font color='red'>Uart2</font>串口问题
STM32----LTDC与DMA2D
一、硬件环境 第一代野火F29开发板,MCU为stm32f429IGT6。板载IS42S16400J SDRAM,16bit位宽 8M容量。 TFT为RG888接口,分辨率为800*480。 二、LTCD初始化 (1)初始化GPIO与SDRAM (2)初始化相关时钟 //2、LTDC相关时钟初始化 /* 配置 PLLSAI 分频器,它的输出作为像素同步时钟CLK*/ /* PLLSAI_VCO 输入时钟 = HSE_VALUE/PLL_M = 1 Mhz */ /* PLLSAI_VCO 输出时钟 = PLLSAI_VCO输入 * PLLSAI_N = 420 Mhz */ /* P
[单片机]
STM32----LTDC与DMA2D
STM32定时器的研究
一直想写个什么计数方面的文章,但是自己的水平有限,一直写不出来,但是这个还是凑合着写吧!!!以前也看过STM32的定时器的,但是感觉还是在一个很模糊的状态,这次就当是自己学习写技术文章的个写作。 一、对于STM32中断优先级的概念的理解 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作 亚优先级 或 副优先级 ,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行 抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先
[单片机]
STM32自学之SPI的DMA操作(寄存器级)
STM32自学之SPI的DMA操作(寄存器级) 一、实验目标 学会配置STM32的SPI寄存器和DMA寄存器,实现STM32的SPI1与SPI2通信功能,每次发送一字节数据,并可多次发送,如果接收的数据正确,则点亮LED灯。之后看可以利用DMA来实现什么功能~~~ 二、实验目的 加入DMA的SPI通信相对于普通SPI通信有什么好处?ST给SPI加了DMA功能出于什么目的?我觉得这是很重要的一个问题,一直边学习边想。以下是我的看法: 减少CPU负荷?我想这应该是DMA最主要的功能,可是对于SPI通信来说,其实大部分时候我们需要根据发送的指令- 目标器件的应答来决定下一个指令,所以此时CPU还是需要一直等待每次通信的结束。而且
[单片机]
<font color='red'>STM32</font>自学之SPI的DMA操作(寄存器级)
STM32(Cortex-M3)中有两个优先级的概念
STM32(Cortex-M3)中有两个优先级的概念 抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断
[单片机]
什么是STM32以及如何学习?
STM32的核心Cortex-M3处理器是一个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处理器拥有32位CPU,并行总线结构,嵌套中断向量控制单元,调试系统以及标准的存储映射。 嵌套中断向量控制器(Nested Vector Interrupt Controller,简称NVIC)是Cortex-M3处理器中一个比较关键的组件,它为基于Cortex-M3的微控制器提供了标准的中断架构和优秀的中断响应能力,为超过240个中断源提供专门的中断入口,而且可以赋予每个中断源单独的优先级。利用NVIC从可以达到极快的中断响应速度,从收到中断请求到执行中断服务的第一条指令仅需12个周期。这种极快的响应速度一方
[单片机]
STM32的DMA数据传输实例
本文将介绍如何通过DMA将ADC采集的数据直接存储到存储器中 而不需要经过CPU; 芯片:STM32F407 工具:STM32CUBEMX KEIL5 ①通过STM32CUBEMX配置工程文件 ②代码实现 ①通过STM32CUBEMX配置工程文件 使能USART3用于调试 PA4外部引脚接的是电压采样电路,将PA4设为ADC1采样通道 使能RCC时钟、配置时钟树 配置DMA 配置ADC1 配置DMA的中断优先级 7、生成代码 ②代码实现 输出重定向: 启动ADC采样后的DMA传输函数: 日志
[单片机]
<font color='red'>STM32</font>的DMA数据传输实例
基于信息融合技术的无线火灾探测报警系统
火的应用对人类的文明发展起了重要的作用,而火灾也一直威胁着人类的生活,造成了重大的生命财产损失。尤其近年来,随着国家经济的快速发展,城市化程度的进一步提高,人员密集场所数量不断增加,火灾的发生频率越来越大,需要社会各界引起高度重视,及时消除隐患,确保消防安全。 目前,火灾自动探测报警系统的应用广泛,在很多地方已成为必备装置,起到了安全保障作用。但在火灾探测报警系统的实际应用中,也出现了许多问题,市场现有产品质量参差不齐,存在产品功能单一、可靠性稳定性不高;只对某一种火灾参数进行探测,出现误报漏报等诸多问题。随着微处理器技术、传感技术、通讯技术、控制技术和人工智能技术等的不断发展,火灾探测报警系统的主要发展方向向着高可靠、低误
[单片机]
基于信息融合技术的无线火灾探测报警系统
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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