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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MSP432串口通信 -> 正文阅读

[嵌入式]MSP432串口通信

MSP432单片机通过串口通信与正点原子图传模块通信

  1. 首先要了解通信协议,这里官方所给的资料中已经提到。
    在使用任何模块之前应该了解模块与单片机之间的通信协议。最常见的比如波特率,奇偶校验等等。但是只满足这些是不够的,有的模块通信过程中往往会有帧头帧尾的情况,这种情况下,我们就需要根据官方给的资料自己来写。话不多说,直接上代码:
/*******************************
@函数说明:满足图传模块与单片机通信协议
@
********************************/

static void Data_Prepare(uint8_t data)
{
	static int dataIndex=0;
	static int A=waitForStart;
	
	switch(A)
	{
		case waitForStart:
			if(data==0x66)
			{
				dataIndex=1;
				Receive_Data_Array[0]=data;
				A=waitForData;
			}
			else
			{
				A=waitForStart;
			}
		break;
		case waitForData:
			Receive_Data_Array[dataIndex]=data;
			dataIndex++;
			if(dataIndex==6)
			{
				A=waitForChksum;
			}
		break;
		case waitForChksum:
			Receive_Data_Array[6]=data;
			if(wifiDataCrc(Receive_Data_Array))
			{
				A=waitForEnd;
			}
			else
			{
				A=waitForStart;
			}
		break;
		case waitForEnd:
			if(data==0x99)
			{
				Receive_Data_Array[7]=data;
				
				USART2_Send(Receive_Data_Array,8);
				
				flag=0;
				
			}
			else
			{
				A=waitForStart;
			}
			 A=waitForStart;

		break;
		default: break;
	 }
}

其中在数据协议中,还要满足第六位与前五位满足与或关系。代码如下

/*****************************
@根据通信协议:第六位应该与前五位满足或与的关系
@
*****************************/
static bool wifiDataCrc(uint8_t *data)
{
	int temp=(data[1]^data[2]^data[3]^data[4]^data[5])&0xff;
	if(temp==data[6])
	return true;
	return false;
}

这里直接利用官方给的历程就好。

  1. 第二步配置432单片机串口
/******************************************* 
*结构体说明: @配置时钟源 12M
		    @配置波特率:利用波特率小助手
			@无奇偶校验
			@一个停止位
            @配置成串口模式
            @过采样与波特率结合
********************************************/
const eUSCI_UART_ConfigV1 uartConfig =
{
	EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source   12M
	39,                                       // BRDIV = 13   6
	1,                                       // UCxBRF = 0   8
	0,                                       // UCxBRS = 0   32
	EUSCI_A_UART_NO_PARITY,                  // No Parity   无奇偶校验
	EUSCI_A_UART_MSB_FIRST,                  // MSB First
	EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit   一个停止位
	EUSCI_A_UART_MODE,                       // UART mode
	EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION,  // Oversampling  过采样
	EUSCI_A_UART_8_BIT_LEN   //八位
};
/***********************************************************
@函数名:USART2_Init
@入口参数:无
@出口参数:无
功能描述:串口2配置 波特率19200
*************************************************************/
void USART2_Init()
{
  MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
             GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
	CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_12);
	MAP_UART_initModule(EUSCI_A2_BASE, &uartConfig);
	MAP_UART_enableModule(EUSCI_A2_BASE);
	MAP_UART_enableInterrupt(EUSCI_A2_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
	MAP_Interrupt_enableInterrupt(INT_EUSCIA2);
}
  1. 最后通过一个全局数组在mai函数中,比较数组的每一位数据是否是你想要的数据即可。
                if(Receive_Data_Array[1]==0x01&&Receive_Data_Array[2]==0x01   //  stop按下时
					&&Receive_Data_Array[3]==0x01&&Receive_Data_Array[4]==0x01
					 &&Receive_Data_Array[5]==0X22&&Receive_Data_Array[6]==0x22)
				{
							GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);     
				}
				else if(Receive_Data_Array[1]==0x01&&Receive_Data_Array[2]==0x01    //上
						&&Receive_Data_Array[3]==0x01&&Receive_Data_Array[4]==0x01
						 &&Receive_Data_Array[5]==0X82&&Receive_Data_Array[6]==0x82)
				{
					  GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0);  
				}

通过上述几步,就可以完成简单的串口通信。还可以举一反三,在帧头帧尾不是一个字节的情况下,应该怎么写自己的通信协议呢?在这理为大家卖个关子,以后遇到多字节帧头帧尾时串口通信时,在为大家讲解。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:31:05  更:2021-08-05 17:33:06 
 
开发: 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/25 18:36:36-

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