嵌入式02 STM32 实验07 串口通信
STM32串口通信(F1系列包含3个USART和2个UART)
一、单片机与PC机串行通信研究目的和意义:
单片机自诞生以来以其性能稳定,价格低廉、功能强大、在智能仪器、工业装备以及日用电子消费产品中得到了广泛的应用。在单片机的输入输出控制中,除直接接上小键盘和LCD显示屏等方法外,一般都通过串口和上位机PC进行通信。这样不仅能够实现远程控制,而且能够利用PC机强大的数据处理功能以及友好的控制界面。在一般的利用PC机对单片机进行控制的场合,都是采用操作系统作为上位机的平台,其优点是界面友好,编程和操作都比较容易。因此PC机与单片机串行通信具有重要的现实及工业意义。
UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器
USART : Universal Synchronous Asynchronous Receiver/Transmitter 通用同步/异步收发器
串行通信
按数据传送方向:
a、单工:数据传输只支持数据在一个方向上传输
b、半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信
c、全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工通信方式的结合,他要求发送设备和接收设备都由独立的接收和发送能力。
按串行通信的通信方式:
a、同步通信:带时钟同步信号传输 SPI,IIC通信接口
b、异步通信:不带时钟同步信号传输 UART(同步异步收发器),单总线
USART:1、2、3 UART:4、5
二、串口通信过程
三、STM32F10x程序设计
本程序的功能是通过串口给STM32发送‘1‘,点亮LED1,发送’2‘,点亮LED2。接收数据同时单片机将接收到的数据发回给电脑
子函数
#include "my_usart.h"
#include "stm32f10x.h" void My_USART1_Init(void)
{
GPIO_InitTypeDef KST_GPIO_Structure;
USART_InitTypeDef KST_USART_Structure;
NVIC_InitTypeDef KST_NVIC_Structure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1时钟 KST_GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
KST_GPIO_Structure.GPIO_Pin = GPIO_Pin_9;
KST_GPIO_Structure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &KST_GPIO_Structure); //初始化GPIOA.9 KST_GPIO_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
KST_GPIO_Structure.GPIO_Pin = GPIO_Pin_10;
KST_GPIO_Structure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &KST_GPIO_Structure); //初始化GPIOA.10 KST_USART_Structure.USART_BaudRate = ; //设置波特率为115200
KST_USART_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
KST_USART_Structure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //收发模式
KST_USART_Structure.USART_Parity = USART_Parity_No; //无奇偶校验位
KST_USART_Structure.USART_StopBits = USART_StopBits_1; //一个停止位
KST_USART_Structure.USART_WordLength = USART_WordLength_8b; //字长为8位数据模式 USART_Init(USART1, &KST_USART_Structure); //初始化串口1
USART_Cmd(USART1, ENABLE); //使能串口
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启中断 KST_NVIC_Structure.NVIC_IRQChannel = USART1_IRQn;
KST_NVIC_Structure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
KST_NVIC_Structure.NVIC_IRQChannelPreemptionPriority = ; //抢占优先级1
KST_NVIC_Structure.NVIC_IRQChannelSubPriority = ; //子优先级1
NVIC_Init(&KST_NVIC_Structure); //根据指定的参数初始化NVIC寄存器
} void USART1_IRQHandler(void) //串口1终端服务函数
{
u8 res;
if(USART_GetITStatus(USART1, USART_IT_RXNE)) //接收中断
{
res = USART_ReceiveData(USART1); //读取接收到的数据
if(res == '')
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5); //点亮LED1
USART_SendData(USART1, res); //发送数据
}
if(res == '')
{
GPIO_ResetBits(GPIOE, GPIO_Pin_5); //点亮LED2
USART_SendData(USART1, res); //发送数据
} }
}
主函数
#include "stm32f10x.h"
#include "my_usart.h"
#include "led.h" int main(void)
{
LED_Init(); //LED初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
My_USART1_Init(); //串口初始化
while();
}
最新文章
- PHP获取接口数据(模拟Get)
- Orcle学习(一)
- List和Dictionary泛型类查找效率浅析
- django views中提示cannot convert dictionary update sequence element #0 to a sequence错误
- 使用Dottrace跟踪代码执行时间
- MySQL数据库初识(一)
- Java Socket常见异常处理 和 网络编程需要注意的问题
- hadoop-ha QJM 架构部署
- 蓝牙 MultipeerConnectivity
- 【02】尽量以const,enum,inline替换#define
- 安卓入门学习之Hello,world!
- js基础(一)
- oracle 导入/导出遇到的 问题总结
- BZOJ_2151_种树_贪心+堆+链表
- asp.net core 3.0 gRPC框架小试
- jquery ajax 方法实例
- 接上篇elasticsecrchi 进行搜索及时提示,数据库以及后台代码
- 阿里巴巴为什么不用 ZooKeeper 做服务发现?
- selenium 单浏览器模式
- CentOS 6.4 添加永久静态路由所有方法汇总(原创)
热门文章
- Flume 实战,将多台机器日志直接收集到 Kafka
- vuex实现登录状态的存储,未登录状态不允许浏览
- HTML引入外部JS文件
- [NOIP2013]华容道 题解
- sql注入用<;>;绕过被过滤的select ——百度杯9月第二场SQL
- Gamma阶段第一次scrum meeting
- Chrome调试工具Developer Tools——前端必备神器
- sharding jdbc(sphere) 3.1.0 spring boot配置
- 时间管理GTD
- CORS跨域带来的preflight request