STM32单片机串口通讯代码

发布者:正在搬砖的河马71最新更新时间:2021-07-05 来源: eefocus关键字:STM32  单片机  串口通讯 手机看文章 扫描二维码
随时随地手机看文章

简介:在STM32开发中,串口是我们最常用的接口。通过串口,我们很方便地把数据输出到电脑,方便我们进行程序调试。下面我们来看看STM32的串口通讯代码。

要实现串口通讯,我们要进行下面几个步骤:


首先:要打开GPIO口的时钟和串口模块时钟。在圆点博士小四轴中,我们用的是GPIOA和COM1模块。


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);


其次:要指定GPIO口,即确定哪些IO是用于串口通讯的。记得使用GPIO_Mode_AF_PP模式


GPIO_InitStructure.GPIO_Pin = BS004_COM1_TX; //圆点博士:设置PA9管脚为串口TX


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //圆点博士:设置串口TX最大允许输出速度


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //圆点博士:设置串口TX为输出


GPIO_Init(GPIOA, &GPIO_InitStructure);


//


GPIO_InitStructure.GPIO_Pin = BS004_COM1_RX; //圆点博士:设置PA9管脚为串口RX


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //圆点博士:设置串口RX为输入


GPIO_Init(GPIOA, &GPIO_InitStructure);


第三步:设置串口模块参数,如波特率,奇偶校验这些。


USART_InitStructure.USART_BaudRate = 115200; //圆点博士:设置串口波特率为115200


USART_InitStructure.USART_WordLength = USART_WordLength_8b; //圆点博士:设置串口数据长度为8位


USART_InitStructure.USART_StopBits = USART_StopBits_1; //圆点博士:设置串口停止位长度为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); //圆点博士:设置串口参数


第四步:如果使用串口中断的话,还要设置中断优先级。下面例子设置为最高优先级0。


NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;


NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_Init(&NVIC_InitStructure);


最后一步,就是打开中断,并使能串口模块拉。


USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //圆点博士:允许接收中断


USART_Cmd(USART1, ENABLE);


上面例子只启动了接收中断。这样,当STM32串口接收到数据的时候,代码就会自动跳转到中断代码里面执行对应的操作。


那么,对于发送,怎么办呢? 我们采用查询的方式来发送。


void BS004_COM1_Send_Char(unsigned char ascii_code) //圆点博士:发送一个字符


{


USART_SendData(USART1,ascii_code);


while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} //圆点博士:等待直到发送完成


}


如过要发送单字符,使用下面的方法:


BS004_COM1_Send_Char('/'); //圆点博士:发送字符/


BS004_COM1_Send_Char(13); //圆点博士:发送回车字符


如过要发送字符串,则使用下面的方法。


void BS004_COM1_Send_Str_Body(unsigned char* str_buf) //圆点博士:发送一个指定长度的字符串


{


unsigned char i,str_len;


str_len=0;


for(i=0;i<64;i++)


{


str_len++;


if(str_buf[i]=='.') break;


}


for(i=0;i


}


在上面的例子中,使用了符号.作为字符串结束标志。

关键字:STM32  单片机  串口通讯 引用地址:STM32单片机串口通讯代码

上一篇:关于单片机编程里面调用sprintf死机的解决方法及原因分析
下一篇:STM32 串口简介

推荐阅读最新更新时间:2024-11-12 21:32

MSP430FR6989功能介绍 首先看
单片机是一个集成电路芯片,是包括了CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能并将其集成到一块硅片上构成的一个小而完善的微型计算机系统。一般把单片机也称为Microcontroller,或MCU。 单片机的应用极其广泛,大到汽车、工业,小到家电、个人消费电子品,里面都有单片机的身影。可以说凡是要进行控制和运算的应用,都有单片机的用武之地。 MSP430是由TI推出的16位的单片机,发展到现在MSP430已有多个系列共500多种型号。不同的MSP430系列集成了不同的外设,主要包括有Flash、RAM、定时器、GPIO、ADC、串行通信模块等。 MSP430以低功耗而闻名,其低
[单片机]
MSP430FR6989功能介绍 首先看
avr单片机精练的两路ADC代码+仿真图
电路原理图如下: #include iom16v.h #include macros.h #define uchar unsigned char #define uchar unsigned int const uchar SEG_CODE = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar display = {0,0,0,10,0,0,0,10}; void delay(uint mS); void main() { uchar i; DDRA = 0xfc;
[单片机]
avr<font color='red'>单片机</font>精练的两路ADC代码+仿真图
STM32填坑:时钟使能必须在外设初始化之前
最近在STM32上写了一份串口通信的程序,但下载复位后串口却不能工作,初始化的代码如下: //发送/接收的GPIO、串口和中断的初始化结构体 GPIO_InitTypeDef GPIO_InitStructureTx; GPIO_InitTypeDef GPIO_InitStructureRx; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //设置发送和接收引脚 GPIO_InitStructureTx.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructureRx.GPIO_Pin = GP
[单片机]
STM32库文件结构及CMSIS介绍
使用STM32库时,各库文件作用及关系: CMSIS标准介绍:
[单片机]
STM32学习笔记---名词解释
1、JTAG是联合测试工作组(Joint Test Action Group)的简称,是在名为标准测试访问端口和边界扫描结构的 IEEE 的标准1149.1的常用名称。此标准用于 测试访问端口 ,使用 边界扫描 的方法来测试 印刷电路板 。使得程序员可以经由JTAG去读取集成在CPU上的调试模块。调试模块可以让程序员调试 嵌入式系统 中的软件。 2、J-Link是SEGGER公司为支持仿真 ARM 内核芯片推出的 JTAG仿真器 。 3、CMSIS:ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M
[单片机]
利用51单片机设计闪烁灯
简介:51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一。 1. 电路图 一个二极管点亮一般需流经的电流值为3mA~10mA,二极管两边的压降为1.6V~1.7V。 2. 点亮二极管: (1)位操作: sbit led0=P0^0; led0=0;//单个位的赋值 (2)总线操作: P0=0xfe;//11111110 整个8位引脚一起赋值 3. 软件仿真: 点工具栏上d图标,双击某行即设置断点;若要用软件仿真查看一条语句的执行时间,一定要在Op
[单片机]
利用51<font color='red'>单片机</font>设计闪烁灯
MSP430单片机实践篇---数字型LCD-1602显示
/************************************************** * * LCD1602显示 * cpu:AVRmega16 * * 描述:4线数据宽度,操作Lcd1602 * 在LCD1602屏幕上第一行显示 * 第二行显示 13652037001 * 如果没有显示请按复位键,并多试几次 * * 时间:2008年1月5日调试成功(出现问题主要是因为LCD第3脚V0的2K接地电阻没有接好) * * 硬件电路:MSP430F135核心实验板-I型 * 硬件连接: * * MSP430与LCD连接信息 * LCD1602,4位接口,即使用D4-D7数据口,D0-D3不接入MCU * PIN1 --
[单片机]
51单片机与三菱PLC无协议通讯成功
我用了两个晚上的时间查阅一些资料,利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址。长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有一定的阅读难度,今天将它与大家分享。希望在此基础上大家能扩展出自己想要的功能,过些时间有空我在写个半双工的程序。 硬件部分: 我用的是天祥单片机实验板,由于没有RS485接口,我利用ADM485芯片自制了一个485接口与三菱PLC的扩展RS485通讯如图,但如果要进行半双工通讯,须将P3.0口到下载程序的RS232芯片的线断开可用一个跳线,用RS485的时候断开RS232,用RS232的时候插上跳线帽。硬件连接如图 PLC程
[单片机]
51<font color='red'>单片机</font>与三菱PLC无协议通讯成功
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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