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

最新文章

  1. PHP获取接口数据(模拟Get)
  2. Orcle学习(一)
  3. List和Dictionary泛型类查找效率浅析
  4. django views中提示cannot convert dictionary update sequence element #0 to a sequence错误
  5. 使用Dottrace跟踪代码执行时间
  6. MySQL数据库初识(一)
  7. Java Socket常见异常处理 和 网络编程需要注意的问题
  8. hadoop-ha QJM 架构部署
  9. 蓝牙 MultipeerConnectivity
  10. 【02】尽量以const,enum,inline替换#define
  11. 安卓入门学习之Hello,world!
  12. js基础(一)
  13. oracle 导入/导出遇到的 问题总结
  14. BZOJ_2151_种树_贪心+堆+链表
  15. asp.net core 3.0 gRPC框架小试
  16. jquery ajax 方法实例
  17. 接上篇elasticsecrchi 进行搜索及时提示,数据库以及后台代码
  18. 阿里巴巴为什么不用 ZooKeeper 做服务发现?
  19. selenium 单浏览器模式
  20. CentOS 6.4 添加永久静态路由所有方法汇总(原创)

热门文章

  1. Flume 实战,将多台机器日志直接收集到 Kafka
  2. vuex实现登录状态的存储,未登录状态不允许浏览
  3. HTML引入外部JS文件
  4. [NOIP2013]华容道 题解
  5. sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL
  6. Gamma阶段第一次scrum meeting
  7. Chrome调试工具Developer Tools——前端必备神器
  8. sharding jdbc(sphere) 3.1.0 spring boot配置
  9. 时间管理GTD
  10. CORS跨域带来的preflight request