IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103—有关陶晶驰串口屏的串口使用代码 -> 正文阅读

[嵌入式]STM32F103—有关陶晶驰串口屏的串口使用代码

串口HMI的基本指令集(官网链接) [USART HMI 资料中心]?

注:设备接收指令结束符为”0XFF 0XFF 0XFF”三个字节(HEX数据,不是字符串数据)。

适用于STM32F103系列的串口1,编写串口协议。

usart1.c

#include "usart1.h"

float everything =0;

//接收缓存
u8 reccmd_temp1[command_length1] ;
//接收标志
u8 rec_flag1 = 0;

u8 flag_temp=0;

u8 flag_first=0;


int fputc(int ch, FILE *f)
{
	USART_SendData(USART1, (unsigned char) ch);
	while (!(USART1->SR & USART_FLAG_TXE));
	return (ch);
}

void USART1_Int(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;        

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入;
    GPIO_Init(GPIOA, &GPIO_InitStructure); //端口A;

    USART_InitStructure.USART_BaudRate = 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);//配置串口参数;

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //中断号;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //响应优先级;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_Cmd(USART1, ENABLE); //使能串口
}

void USART1_IRQHandler(void)
{
		u8 rec_tem   = 0;//--接收缓存
		static u8 rec_count = 0;//--接收计数
		static u8 Start_rec_flag1 = 0;//接受标志位
		if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
		{	
				rec_tem = USART_ReceiveData(USART1);
				if(rec_tem == open_first)//判断接受的数据的指令头是否正确
				{
						rec_count = 0;
						Start_rec_flag1  = 1;
				}	
				if(Start_rec_flag1)//开始接收
				{
						reccmd_temp1[rec_count ++] = rec_tem;//将接收到的一个字节数据存入 接收缓存
						if(rec_count == command_length1)//接收完成
						{	
								Start_rec_flag1 = 0;
								rec_count = 0;
								rec_flag1  = 1;	
						}	
				}
				USART_ClearITPendingBit(USART1, USART_IT_RXNE);	//清除标志位;
		}
}





//--协议解析  AA 01 00 00 00 00 00 00
void protocol_analysis(void)
{
		if(reccmd_temp1[0] == 0xAA )	//判断是起始位和名称
		{
				reccmd_temp1[0] = 0;
				switch(reccmd_temp1[1])//判断类型
				{
					case 0x01:
						led_on;		//开灯
                        everything+=1;
						flag_first = 0;
					break;
					
					case 0x02:		
						led_off;    //关灯
                        everything-=1;
						flag_first = 1;					
					break;
				}			
		}
}

usart1.h

#ifndef _usart1_H
#define _usart1_H

#include "stm32f10x.h"
#include "stdbool.h"
#include "stdio.h"
#include "led.h"

extern float everything;

//--指令长度
#define command_length1				 8

//--接收缓存
extern u8 reccmd_temp1[command_length1];

//--接收标志
extern u8 rec_flag1;
extern u8 dis_tence;
extern u8 flag_first;

//--指令头
#define open_first   					 0xAA

//串口1初始化
void USART1_Int(void);

// 串口1 接收中断函数 
void USART1_IRQHandler(void);

//串口协议
void protocol_analysis(void);

#endif

main.c

#include "stm32f10x.h"
#include "systick.h"
#include "led.h"
#include "usart1.h"

int main()
{
	led_int();
	delay_init();	
	USART1_Int();

	while(1)
	{
		while(flag_first ==0)
		{
			protocol_analysis();     //串口协议解析		
			printf("t1.txt=\" %.3lf\r\n\"\xff\xff\xff", everything);//串口屏实时显示
		}
	}
}

在上述的串口屏实时显示的时候,使用串口屏软件中t1.txt的模块。即:everthing在t1.txt的模块中显示。

在串口屏软件中写的协议,如下所示:

?其中printh用于十六进制

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:46:32  更:2022-03-04 15:47:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:17:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码