简介:在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
}
在上面的例子中,使用了符号.作为字符串结束标志。
上一篇:关于单片机编程里面调用sprintf死机的解决方法及原因分析
下一篇:STM32 串口简介
推荐阅读最新更新时间:2024-11-12 21:32
设计资源 培训 开发板 精华推荐
- SPX1431 精密可调并联稳压器的典型应用电路
- 具有基本抑制功能的 LF15ABDT-TR 1.5V 低压降稳压器的典型应用
- MINI-ESP32门禁
- 使用 NXP Semiconductors 的 TDA8933 的参考设计
- NCS7101电流电压转换器典型应用电路
- 使用 ON Semiconductor 的 NCP1605 的参考设计
- 基于LDR6023B手机OTG扩展坞
- 基于STSPIN32F0252的电池供电的无刷电动工具的紧凑型参考设计
- ADP1715-1.8-EVALZ,评估板可用于演示线性稳压器ADP1715的功能
- NCV7381A0V2GEVB:FlexRay ® 收发器,Clamp 30 评估板
- Waymo打造最大弱势道路使用者交通事故数据集 可帮助指导自动驾驶系统研发
- 车载显示,大步向前
- 新专利:未来福特汽车或将配备亮度管理系统
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车