STM32F103ZET6【标准库函数开发】----- 04串口4的IO口收发数据实验测试
链接: 串口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口收发数据实验测试相关推荐
- 串口与普通IO口的区别
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够 ...
- 51单片机开发入门(3)-IO口应用
前言 根据前面对51单片机的了解和基础理论知识的掌握,接下来就正式进入单片机开发--实践.引用最近几天追的电视剧<觉醒年代>里新文化领袖陈独秀.李大钊等革命前辈们一直在说的和在践行的马克思 ...
- 树莓派底层IO驱动开发示例(一个简单io口驱动的开发)
一.驱动代码的开发 1.树莓派寄存器的介绍 点击查看:树莓派(bcm2835芯片手册) GPFSEL0 GPIO Function Select 0: 功能选择 输入/输出 GPSET0 GPIO P ...
- STM32F103ZET6【标准库函数开发】------PB3,PB4当做普通IO口,重定义
一.如题,我在设计原理图的时候将PB3和PB4当做了普通IO口,结果按照一般配置的方法操作后,PB3 PB4并没有输出自己想要的信号,配置如下: void MOTOR_GPIO_Init(void)/ ...
- STM32F103标准库开发---SPI实验---读写 W25Q128 外部 Flash
STM32F103标准库开发----目录 W25Q128读写----程序源码----点击下载 W25Qxx全系列数据手册-点击下载 一.实验前期准备 本次实验的 MCU 是 STM32F103C8T6 ...
- 判断按键值_ALIENTEK 阿波罗 STM32F767 开发板资料连载第七章 按键输入实验
1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上 ...
- STM32 IO口模拟串口通讯
转自:http://ziye334.blog.163.com/blog/static/224306191201452833850647 前阵子,调项目时需要用到低波特率串口通讯(300的波特率),才发 ...
- Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出(lpc1788)
摘要: c标准库的printf是输出给显示器的,将printf函数进行修改,使其输出重定向至串口,就能实现目的.printf函数调用fputc函数完成实质输出单一字符的工作,因此将fputc函数修改使 ...
- 了解库开发,我们从STM32标准库开发学起
摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...
- 485串口测试工具软件_探索者 STM32F407 开发板资料连载第三十一章 485 实验
1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十一章 485 实验 ...
最新文章
- 再见丑陋的 SwaggerUI,这款API文档生成神器界面更炫酷,逼格更高!
- 为什么说美团终将放弃打车?
- 五、Chain链的作用
- java 普通类获取session_如何在Java的普通类中获取Session以及request对象
- [HNOI2012]排队
- 【Codeforces - 977D】Divide by three, multiply by two(思维构造)
- 安装XDS110驱动时系统找不到指定文件
- VMware环境下如何使用iSCSI共享存储(配置实验笔记)
- 昆山立讯电子工程师_西安立讯科技学院与立讯精密公司签订校企合作战略合作协议...
- Apache Log4j任意代码执行漏洞安全风险通告第三次更新
- PyTorch:nn操作
- 论文用impact、effect、influence 什么区别
- solidworks钣金件设计术语creo/ug适用
- ubuntu18之wine
- verilogVGA显示太极图案
- Android车载蓝牙相关开发4:蓝牙电话操作器BluetoothHeadsetClient
- Nodejs 微信加密消息开发
- 七牛云测试域名过期了,全部图片下载方法
- Elasticsearch5基于completion suggester实现提示词(类京东淘宝)
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息