STM32的串口知识及其配置

发布者:春林初盛最新更新时间:2017-10-29 来源: eefocus关键字:STM32  串口知识  配置 手机看文章 扫描二维码
随时随地手机看文章

1.串口知识

串口的应用就是芯片给电脑发数据,电脑下载程序到芯片上,芯片把芯片存储器中的数据发回电脑,比如当你测量角度或者速度时,芯片测量好后,你要看到,必须让芯片把数据发回电脑的串口,大致就是这样。

对于STM32中容量的芯片有3个串口,我们一般使用串口1,说到串口,那么芯片怎么通过串口发送数据到电脑上的,当然是通过引脚的端口,如果芯片串口的输出引脚和外部的RX和TX已经集成,那么厂家已经把STM32的端口连接到RX和TX上了,把串口看成外部设备,简称外设,厂家已经把串口输出端口内部连接到RX和TX上,所以我们不用手动连接,如果没有,你还需要用杜邦线连接。

如果你还想知道内部的硬件情况的话,下图就是:

STM32的串口知识及其配置
我们一般使用USART1串口,所以看表47即可,USART1_REMAP是端口重映像的控制端口,就是端口复用,在我的STM32上没有重映像,如果有的话,就应该打开复用时钟,之后,本文就不讲解了。

我们使用PA9和PA10端口,作为TX和RX。

对于PA9和PA10的配置,如下图:

STM32的串口知识及其配置

由表21知,PA9应该配置为推挽复用输出,PA10应该配置为浮空输入或者上拉输入。

讲了这么多,其实就是为了说明为什么USART1要进行PA9应该配置为推挽复用输出,PA10应该配置为浮空输入或者上拉输入这样的配置,不同的STM型号有可能配置口不太一样,读者了解后,查阅相关资料文档,应该可以找到类似的东西。

2.串口程序编写的大致步骤

最好在USART.c中加入关于printf重定义,测试程序会方便很多。

0)printf的重定义

1)变量定义

2)时钟配置

3)GPIO口的配置

4)USART的配置

5)中断NVIC配置

6)USART中断函数的配置

3.例程

本例程功能:

电脑发数据给串口也就是芯片,芯片回复收到了;

//加入以下代码,支持printf函数,而不需要选择use MicroLIB  

#if 1

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE 

int handle; 

}; 

FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    

_sys_exit(int x) 

x = x; 

//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 

    USART_SendData(USART1,(uint8_t)ch);   

return ch;

}

#endif

////UASRT1初始化

void uart_init(u32 bound){

//变量定义

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断向量组

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟

 

//USART1_TX   PA.9

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9

    //USART1_RX  PA.10

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10

USART_DeInit(USART1);  //复位串口1

USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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(USART1, &USART_InitStructure); //初始化串口

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

   

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断

    USART_Cmd(USART1, ENABLE);                    //使能串口 

void USART1_IRQHandler(void){

u8 data_recv; 

 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // { USART_ClearFlag(USART1,USART_FLAG_RXNE); // 必须清除标志 USART_ClearITPendingBit(USART1,USART_IT_RXNE); // 

 data_recv = USART_ReceiveData(USART1);

//接受的数据为data_recv

printf("收到了\n"); 

 }

}


关键字:STM32  串口知识  配置 引用地址:STM32的串口知识及其配置

上一篇:STM32的时钟配置
下一篇:STM32的通用定时器的知识及其配置

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

如何设计基于stm32的数字示波器
随着集成电路的发展和数字信号处理技术的采用,数字示波器已成为集显示、测量、运算、分析、记录等各种功能于一体的智能化测量仪器。数字示波器在性能上也逐渐超越模拟示波器,并有取而代之的趋势。与模拟示波器相比,数字示波器不仅具有可存储波形、体积小、功耗低,使用方便等优点,而且还具有强大的信号实时处理分析功能。因此,数字示波器的使用越来越广泛。目前我国国内自主研发的高性能数字示波器还是比较少,广泛使用的仍是国外产品。因此,有必要对高性能数字示波器进行广泛和深入研究。 本文通过采用高速高性能器件,设计了一实时采样率为60 msa/s的宽带数字示波器。 1 数字示波器的性能参数设计 数字存储示波器的指标很多,包括采样率、带宽、灵敏度、通
[测试测量]
如何设计基于<font color='red'>stm32</font>的数字示波器
STM32 串口通讯 发送 接收
STM32的使用有利有弊,种类多---但是种类有太多,资料也是比较乱的,还有就是库的调用,经常忘记一些函数的使用------比如最常用的串口------ ------------------------------------------------------------------------------USART ----设置------------------------------- void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
[单片机]
STM32寄存器操作简单介绍
STM32单片机可以使用库函数进行操作,再加上现在越来越强大的MDK ARM编译环境,使用库函数开发简直是不二的选择,但是工具越来越强大的同时意味着对编程人员降低了要求,在很大程度上降低了准入门槛,我们因此高兴吗?我倒是觉得这很像温水煮青蛙,所以库函数固然好用却也不应该抛弃最初的做法——寄存器操作。 先从启动文件开始介绍:这里介绍比较常见的一种启动方式(从内部的的FLASH启动,至于另外两个是否常用本人不甚了解),在启动代码了首先对栈和堆的大小进行定义,并在代码的起始处建立中断向量表,其第一个表项是栈顶(__initial_sp )地址,第二个表项是复位中断服务( Reset_Handler )入口地址。然后在复位中断服务程序中跳
[单片机]
Stm32 产生pwm的频率解惑?
问题一: //TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate); void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) { /* Check the parameters */ assert_param(IS_TIM_ALL_PERIPH(TIMx)); assert_param(IS_TIM_PRESCALER_RELOAD
[单片机]
<font color='red'>Stm32</font> 产生pwm的频率解惑?
STM32之TIMER定时器之间不同点
STM32F1系类有1~14一共14个定时器;具体型号不一样会有所不同。它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们可以同步操作。 TIM6和TIME7是基本定时器,他们通常作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它 们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。 这2个定时器是互相独立的,不共享任何资源。
[单片机]
<font color='red'>STM32</font>之TIMER定时器之间不同点
制作一个STM32下载器的过程
本文介绍制作一个STM32下载器的过程。 原理图 STLINK-V2下载器电路原理图如下。 上图中,H5接口是固件下载口。H4接口是STLINK-V2下载口(实现下载功能的接口 T_JTCK就是SWCLK, T_JTMS就是 SWDIO)。其他都是测试接口。 制作过程 首先我们焊接完的板子是不能用的,需要往里面下载固件。前提是你手头有一块好的ST-LinkV2下载器,不然就白搞了。 使用好的STLINK-V2下载器给我们自己制作的STLINK-V2板子下载固件,将STLINK-V2下载器连接角与板子上的H5固件下载接口对应连接,再将STLINK-V2连接到电脑, 安装ST的ST-LINK Utility软件,使用STM
[单片机]
制作一个<font color='red'>STM32</font>下载器的过程
STM32的理解
现谈一点单片机的简单知识及STM32相比于其他单片机的优势。单片机最小系统需要有晶振电路,复位电路,电源供电以及接地,简单来说单片机就是通过芯片来控制外围电路的一个微型控制器。相比较于Arduino,AVR,K60,STM32拥有更丰富的外设,这就意味着它有更强大的功能,完成更多的实验。同时STM32拥有更快的图像采集速度。再来随便讲一些有关单片机的简单知识:晶振——一个用于给整个单片机计时的元器件,同时STM32其他部位上还有一些时钟,用于控制该部分是否工作。一些其他程序:看门狗——用于检测程序的运行是否正常,在自己的程序“跑飞”的时候能够及时将程序复位。中断——在自己的程序运行的时候突然有另一个程序介入,自己的程序中断,运行介
[单片机]
STM32外部中断执行过程
一、MCU中断程序执行过程 以MCU裸机程序框架为例,MCU 的主函数是个死循环: 主函数: main(void) { While(1) { //主程序 } } 如果没有中断或异常产生会一直在while(1)里执行主程序代码。当中断产生后,当前执行的任务会被打断,程序跳转到中断处理函数执行,执行完会返回之前的主程序断点处继续执行。 中断处理函数: void IRQ_handler(void) { //中断处理程序 //清除中断标志,否则会不停的进入中断处理程序。 } 在中断处理函数中不要做复杂费时的事情,中断内做的事情尽可能少。 二、中断使用实例 STM32的IO都可以配置成外部中断,但不是同时都可以配成外部中断。需要遵循如下
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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