链接: 串口1的两组IO口收发数据实验
链接: 串口2的两组IO口收发数据实验
链接: 串口3的三组IO口收发数据实验
链接: 串口5的一组IO口收发数据实验

一、硬件介绍

本次实验用到的单片机是STM32F103ZET6,正点原子战舰开发板
用到的单片机资源:LED、按键、USART1(两组IO)
两个LED接PB5和PE5,都是高电平灭,低电平亮

在STM32F103ZET6里面,串口4只有一组,对应的IO为PC10和PC11

二、实现目的

1、按下KEY0,红灯亮、绿灯灭、串口调试助手接收到0x0a,0x0b,0x0c,0x0d 2、按下KEY1,绿灯亮、红灯灭、串口调试助手接收到0x11,0x22,0x33,0x44 3、串口调试助手发送0xaa,0xbb,红灯绿灯都点亮。发送其他数据,红灯绿灯都熄灭

三、实现效果

硬件连接:TX-PC10;RX-PC11
led初始化

#include "led.h"
void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);   //使能PB,PE端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                 //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5);                       //PB.5 输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                //LED1-->PE.5 端口配置, 推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure);                   //推挽输出 ,IO口速度为50MHzGPIO_SetBits(GPIOE,GPIO_Pin_5);                       //PE.5 输出高
}

按键初始化

#include "stm32f10x.h"
#include "key.h"
#include "sys.h"
//按键初始化函数
void KEY_Init(void) //IO初始化
{ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//KEY0-KEY2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
}

串口4初始化(PC10、PC11)

//重定义fputc函数
int fputc(int ch, FILE *f)
{      while((UART4->SR&0X40)==0);//循环发送,直到发送完毕   UART4->DR = (u8) ch;      return ch;
}
void uart_init(u32 bound)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能USART1,GPIOA,复用时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);//USART1_TX   GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX     GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.10  //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率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(UART4, &USART_InitStructure); //初始化串口1USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(UART4, ENABLE);                    //使能串口1
}

串口4中断服务函数

void UART4_IRQHandler(void)                  //串口1中断服务程序
{u8 Res;if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(UART4); //读取接收到的数据if((USART_RX_STA&0x8000)==0)//接收未完成{if(USART_RX_STA&0x4000)//接收到了0x0d{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始else USART_RX_STA|=0x8000;  //接收完成了 }else //还没收到0X0D{   if(Res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收   }      }}          }
}

主函数

int a[]={0x0a,0x0b,0x0c,0x0d};
int a1[]={0x11,0x22,0x33,0x44};int main(void){      u16 i;  u16 len;   delay_init();            //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);     //串口初始化为115200LED_Init();               //LED端口初始化KEY_Init();          //初始化与按键连接的硬件接口while(1){if(KEY0==0){LED0=0;LED1=1;for(i=0;i<4;i++){USART_SendData(UART4, a[i]);}}if(KEY1==0){LED0=1;LED1=0;for(i=0;i<4;i++){USART_SendData(UART4, a1[i]);}      }       if(USART_RX_STA&0x8000){                       len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度if((USART_RX_BUF[0]==0xaa)&&(USART_RX_BUF[1]==0xbb)){LED0=0;LED1=0; }else{LED0=1;LED1=1;              }USART_RX_STA=0;}          }    }

百度云链接:
链接:https://pan.baidu.com/s/1kS1f4Jii2jfwGZY_BtUdqw?pwd=nydv
提取码:nydv

STM32F103ZET6【标准库函数开发】----- 04串口4的IO口收发数据实验测试相关推荐

  1. 串口与普通IO口的区别

    General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够 ...

  2. 51单片机开发入门(3)-IO口应用

    前言 根据前面对51单片机的了解和基础理论知识的掌握,接下来就正式进入单片机开发--实践.引用最近几天追的电视剧<觉醒年代>里新文化领袖陈独秀.李大钊等革命前辈们一直在说的和在践行的马克思 ...

  3. 树莓派底层IO驱动开发示例(一个简单io口驱动的开发)

    一.驱动代码的开发 1.树莓派寄存器的介绍 点击查看:树莓派(bcm2835芯片手册) GPFSEL0 GPIO Function Select 0: 功能选择 输入/输出 GPSET0 GPIO P ...

  4. STM32F103ZET6【标准库函数开发】------PB3,PB4当做普通IO口,重定义

    一.如题,我在设计原理图的时候将PB3和PB4当做了普通IO口,结果按照一般配置的方法操作后,PB3 PB4并没有输出自己想要的信号,配置如下: void MOTOR_GPIO_Init(void)/ ...

  5. STM32F103标准库开发---SPI实验---读写 W25Q128 外部 Flash

    STM32F103标准库开发----目录 W25Q128读写----程序源码----点击下载 W25Qxx全系列数据手册-点击下载 一.实验前期准备 本次实验的 MCU 是 STM32F103C8T6 ...

  6. 判断按键值_ALIENTEK 阿波罗 STM32F767 开发板资料连载第七章 按键输入实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上 ...

  7. STM32 IO口模拟串口通讯

    转自:http://ziye334.blog.163.com/blog/static/224306191201452833850647 前阵子,调项目时需要用到低波特率串口通讯(300的波特率),才发 ...

  8. Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出(lpc1788)

    摘要: c标准库的printf是输出给显示器的,将printf函数进行修改,使其输出重定向至串口,就能实现目的.printf函数调用fputc函数完成实质输出单一字符的工作,因此将fputc函数修改使 ...

  9. 了解库开发,我们从STM32标准库开发学起

    摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...

  10. 485串口测试工具软件_探索者 STM32F407 开发板资料连载第三十一章 485 实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十一章 485 实验 ...

最新文章

  1. 再见丑陋的 SwaggerUI,这款API文档生成神器界面更炫酷,逼格更高!
  2. 为什么说美团终将放弃打车?
  3. 五、Chain链的作用
  4. java 普通类获取session_如何在Java的普通类中获取Session以及request对象
  5. [HNOI2012]排队
  6. 【Codeforces - 977D】Divide by three, multiply by two(思维构造)
  7. 安装XDS110驱动时系统找不到指定文件
  8. VMware环境下如何使用iSCSI共享存储(配置实验笔记)
  9. 昆山立讯电子工程师_西安立讯科技学院与立讯精密公司签订校企合作战略合作协议...
  10. Apache Log4j任意代码执行漏洞安全风险通告第三次更新
  11. PyTorch:nn操作
  12. 论文用impact、effect、influence 什么区别
  13. solidworks钣金件设计术语creo/ug适用
  14. ubuntu18之wine
  15. verilogVGA显示太极图案
  16. Android车载蓝牙相关开发4:蓝牙电话操作器BluetoothHeadsetClient
  17. Nodejs 微信加密消息开发
  18. 七牛云测试域名过期了,全部图片下载方法
  19. Elasticsearch5基于completion suggester实现提示词(类京东淘宝)
  20. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息

热门文章

  1. 农村市场谋定中国农民丰收节交易会 消费潜力持续正释放
  2. element ui实现抽屉效果_抽屉效果的导航菜单
  3. Java实现从第三方系统单点登录到致远OA
  4. JS中onblur总结
  5. 什么是php-fpm
  6. 自定义表单控件(我是一个粉刷匠)
  7. java环境安装1359错误_iserver java api接口频发错误
  8. 微信语音麦克风静音_微信中打电话静音是我被静音还是对方被静音,具体这个静音是什么意思...
  9. 基于jsp java的计算机英语单词学习系统
  10. IIS的安装及web服务器配置