(四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)
0 前言
本期的实验目的为:使用核心板上的SCI串口通信功能,在电脑端上位机,输入数字0,1,2,3,4,分别控制五个LED亮灭。
1 DSP代码
(注意:查看代码时双击点进去看,否则会内容不全)。
main.c
/*** ********************************************************************************************* @file main.c* @file SK Electronics* @version V1.0* @date 2020-xx-xx* @brief SCI串口通信中断接发测试* ******************************************************************************************** @attention* 实验平台:SK-F28335Mini 核心板* CSDN博客:https://blog.csdn.net/weixin_46556696* 淘宝:https://shop409670932.taobao.com*/#include "DSP28x_Project.h"
#include "bsp_sci.h"
#include "bsp_led.h"
#define FLASH_RUN 1
#define SRAM_RUN 2
#define RUN_TYPE FLASH_RUN
#if RUN_TYPE==FLASH_RUN
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
#endif
unsigned char i=0;
Uint16 ReceivedChar; //变量定义
char *msg; //指针
interrupt void scia_Tx_isr(void);
interrupt void scia_Rx_isr(void);void delay_1ms(Uint16 t);
/*** @brief 主函数* @parameter 无* @return_value 无*/
void main(void)
{/*第一步:初始化系统控制:*/InitSysCtrl();/*第二步:初始化GPIO口*/InitGpio();/* 第三步:清除所有中断 和初始化 PIE 向量表:*/DINT;// 关闭全局中断InitPieCtrl();// 初始化 PIE 控制寄存器到默认状态,默认状态是全部 PIE 中断被禁用和标志位被清除IER = 0x0000;// 禁用 CPU 中断和清除所有 CPU 中断标志位:IFR = 0x0000;InitPieVectTable();// 初始化 PIE 中断向量表// 中断重映射,注册中断程序入口(用户按需求添加)EALLOW;PieVectTable.SCITXINTA=&scia_Tx_isr;PieVectTable.SCIRXINTA=&scia_Rx_isr;EDIS;///*程序烧录入28335(可选的)*/
#if RUN_TYPE==FLASH_RUNMemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);InitFlash();
#endif/* 第四步: 初始化片上外设*/// InitPeripherals(); //初始化所有外设(本例程不需要)Sci_Init();//初始化和配置SCIA串口通信/* 第五步:添加用户功能具体代码*/LED_GPIO_Config();//配置LED端口EINT;ERTM;msg = "\r\n\n\nHello SK Electronics!\0"; //发送语句scia_msg(msg); //发送函数msg = "\r\n更详细的DSP基础教程,请关注支持本人博客哈!\0"; //发送语句scia_msg(msg); //发送函数msg = "\r\nCSDN博客:https://blog.csdn.net/weixin_46556696\0"; //发送语句scia_msg(msg); //发送函数msg = "\r\n淘宝店铺:https://shop409670932.taobao.com\0"; //发送语句scia_msg(msg); //发送函数msg = "\r\n\n\n这是一个串口中断接收回显实验 \n\0"; //发送语句scia_msg(msg);msg = "\r\n\r\n请在串口调试助手输入单字符:\n\0"; //发送语句scia_msg(msg); //发送函数/*第六步:进入主循环*/for(;;){}
}/*** @brief 1ms延迟函数* @parameter t* @return_value 无*/
void delay_1ms(Uint16 t)
{while(t--){DELAY_US(1000);}
}interrupt void scia_Tx_isr()
{PieCtrlRegs.PIEACK.all=M_INT9;
}interrupt void scia_Rx_isr()
{// while(SciaRegs.SCIRXST.bit.RXRDY !=1) { } //等待从上位机收到数据PieCtrlRegs.PIEACK.all=M_INT9;ReceivedChar = SciaRegs.SCIRXBUF.all;//把接收BUF里的数据赋值给ReceivedCharmsg = " 已发送: \0"; //发送语句scia_msg(msg); //发送函数scia_xmit(ReceivedChar); //发送ReceivedCharmsg = "\r\n\r\n请在串口调试助手输入单字符:\n\0"; //发送语句scia_msg(msg); //发送函数/*根据接收到0~4控制对应LED灯*/switch(ReceivedChar){case '0': LED0_TOGGLE;break;case '1': LED1_TOGGLE;break;case '2': LED2_TOGGLE;break;case '3': LED3_TOGGLE;break;case '4': LED4_TOGGLE;break;default:break;}
}
bsp_led.h
/*** ********************************************************************************************* @file bsp_led.h* @file SK Electronics* @version V1.0* @date 2020-xx-xx* @brief LED应用函数接口头文件* ******************************************************************************************** @attention* 实验平台:SK-F28335Mini 核心板* CSDN博客:https://blog.csdn.net/weixin_46556696* 淘宝:https://shop409670932.taobao.com*/#ifndef _BSP_LED_H_
#define _BSP_LED_H_
#include "DSP28x_Project.h"/* 宏带参,可以像内联函数一样使用,低电平亮灯*/
#define LED0(a) if (a) \GpioDataRegs. GPACLEAR.bit.GPIO0=1;\else \GpioDataRegs. GPASET.bit.GPIO0=1#define LED1(a) if (a) \GpioDataRegs. GPACLEAR.bit.GPIO1=1;\else \GpioDataRegs. GPASET.bit.GPIO1=1#define LED2(a) if (a) \GpioDataRegs. GPACLEAR.bit.GPIO2=1;\else \GpioDataRegs. GPASET.bit.GPIO2=1#define LED3(a) if (a) \GpioDataRegs. GPACLEAR.bit.GPIO3=1;\else \GpioDataRegs. GPASET.bit.GPIO3=1#define LED4(a) if (a) \GpioDataRegs. GPACLEAR.bit.GPIO4=1;\else \GpioDataRegs. GPASET.bit.GPIO4=1/*定义IO口的宏*/
#define LED0_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO0=1
#define LED0_OFF GpioDataRegs. GPASET.bit.GPIO0=1
#define LED0_ON GpioDataRegs. GPACLEAR.bit.GPIO0=1#define LED1_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO1=1
#define LED1_OFF GpioDataRegs. GPASET.bit.GPIO1=1
#define LED1_ON GpioDataRegs. GPACLEAR.bit.GPIO1=1#define LED2_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO2=1
#define LED2_OFF GpioDataRegs. GPASET.bit.GPIO2=1
#define LED2_ON GpioDataRegs. GPACLEAR.bit.GPIO2=1#define LED3_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO3=1
#define LED3_OFF GpioDataRegs. GPASET.bit.GPIO3=1
#define LED3_ON GpioDataRegs. GPACLEAR.bit.GPIO3=1#define LED4_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO4=1
#define LED4_OFF GpioDataRegs. GPASET.bit.GPIO4=1
#define LED4_ON GpioDataRegs. GPACLEAR.bit.GPIO4=1void LED_GPIO_Config(void);
#endif /*_BSP_LED_H_ */
bsp_led.c
/*** ********************************************************************************************* @file bsp_led.c* @file SK Electronics* @version V1.0* @date 2020-xx-xx* @brief LED应用函数接口* ******************************************************************************************** @attention* 实验平台:SK-F28335Mini 核心板* CSDN博客:https://blog.csdn.net/weixin_46556696* 淘宝:https://shop409670932.taobao.com*/
#include "bsp_led.h"
void LED_GPIO_Config(void)
{EALLOW;GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;//普通IO模式GpioCtrlRegs.GPAPUD.bit.GPIO0=0;//使能内部上拉GpioCtrlRegs.GPADIR.bit.GPIO0=1;//配置成输出GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;//普通IO模式GpioCtrlRegs.GPAPUD.bit.GPIO1=0;//使能内部上拉GpioCtrlRegs.GPADIR.bit.GPIO1=1;//配置成输出GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//普通IO模式GpioCtrlRegs.GPAPUD.bit.GPIO2=0;//使能内部上拉GpioCtrlRegs.GPADIR.bit.GPIO2=1;//配置成输出GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//普通IO模式GpioCtrlRegs.GPAPUD.bit.GPIO3=0;//使能内部上拉GpioCtrlRegs.GPADIR.bit.GPIO3=1;//配置成输出GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;//普通IO模式GpioCtrlRegs.GPAPUD.bit.GPIO4=0;//使能内部上拉GpioCtrlRegs.GPADIR.bit.GPIO4=1;//配置成输出GpioDataRegs. GPASET.bit.GPIO0=1;GpioDataRegs. GPASET.bit.GPIO1=1;GpioDataRegs. GPASET.bit.GPIO2=1;GpioDataRegs. GPASET.bit.GPIO3=1;GpioDataRegs. GPASET.bit.GPIO4=1;EDIS;
}
bsp_sci.h
/*** ********************************************************************************************* @file bsp_sci.h* @file SK Electronics* @version V1.0* @date 2020-xx-xx* @brief 串口通信函数接口头文件* ******************************************************************************************** @attention* 实验平台:SK-F28335Mini 核心板* CSDN博客:https://blog.csdn.net/weixin_46556696* 淘宝:https://shop409670932.taobao.com*/#ifndef _BSP_SCI_H_
#define _BSP_SCI_H_
#include "DSP28x_Project.h"void Sci_Init(void);
void scia_xmit(int a);//发送字节的函数
void scia_msg(char * msg);//发送数组的函数
#endif /*_BSP_SCI_H_ */
bsp_sci.c
/*** ********************************************************************************************* @file bsp_sci.c* @file SK Electronics* @version V1.0* @date 2020-xx-xx* @brief 串口通信应用函数接口* ******************************************************************************************** @attention* 实验平台:SK-F28335Mini 核心板* CSDN博客:https://blog.csdn.net/weixin_46556696* 淘宝:https://shop409670932.taobao.com*/
#include "bsp_sci.h"
/*** @brief 初始化SCI串口配置* @parameter 无* @return_value 无*/
void Sci_Init(void)
{//SCI的工作模式和参数需要用户在后面的学习中,深入的了解一个寄存器底层相关的资料了,多看看芯片手册和寄存器的意思。//因为28335的寄存器太多了,所以在以后的学习过程中,就不会对寄存器进行详细的注释了。InitSciaGpio();SciaRegs.SCICCR.all=0x07;// 1 stop bit, No loopback// No parity,8 char bits// async mode, idle-line protocolSciaRegs.SCICTL1.all=0x03;// enable TX, RX, internal SCICLK,#if(CPU_FRQ_150MHZ)SciaRegs.SCIHBAUD=0x0001;// 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD=0x00E7;#endif#if(CPU_FRQ_100MHZ)SciaRegs.SCIHBAUD=0x0001;// 9600 baud @LSPCLK = 20MHz.SciaRegs.SCILBAUD=0x0044;#endifSciaRegs.SCICTL2.bit.RXBKINTENA=1;SciaRegs.SCICTL2.bit.TXINTENA=1;//SciaRegs.SCICCR.bit.LOOPBKENA=1;SciaRegs.SCICTL1.bit.SWRESET=1;PieCtrlRegs.PIECTRL.bit.ENPIE=1;IER|=M_INT9;PieCtrlRegs.PIEIER9.bit.INTx1=1;PieCtrlRegs.PIEIER9.bit.INTx2=1;}void scia_xmit(int a)//发送字节的函数
{while (SciaRegs.SCICTL2.bit.TXRDY == 0) {}SciaRegs.SCITXBUF=a;}void scia_msg(char * msg)//发送数组的函数
{int i;i = 0;SciaRegs.SCICTL2.bit.TXINTENA=0;while(msg[i] != '\0'){scia_xmit(msg[i]);i++;}SciaRegs.SCICTL2.bit.TXINTENA=1;
}
2 结论
通过此例程,上位机发送单字符的数字 0,1,2,3,4 可以分别控制对应LED状态反转。大家可以尝试一下!
更详细的讲解请关注公众号:电力电子学社
QQ群:945257491 一起讨论!
(四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)相关推荐
- 单片机实验八 RS232串口通信实验(接收与发送)
实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...
- 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验
一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...
- 【正点原子FPGA连载】第十四章 串口通信实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- 【STM32】标准库与HAL库对照学习教程八--串口通信详解
[STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...
- 基于FPGA的UART串口通信实验(VHDL语言实现)
一.前言: 最近在做UART串口通信的相关实验时,在网上查了很多资料,发现网上的大部分文章只注重理论,不注重代码,很多代码有错误不说,而且难以理解.故在完成此实验后,起了写一篇博客的心思,以供有想做相 ...
- 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 嵌入式系统 实验二 串口通信实验
实验二 串口通信实验 一.实验目的 1.)了解 USART 的基本特性: 2.)掌握用库函数操作 USART 的方法: 3.)掌握如何使用 STM32 的串口发送和接收数据. 二.实验环境 1.)硬件 ...
- windows通信端口初始化失败_STM32实例——USART串口通信实验(二)
USART 串口通信配置步骤 在上面的介绍中,可能有的朋友很不理解,不过没有关系,下面我们讲解如何使用库函数对 USART 进行配置.这个也是在编写程序中必须要了解的.具体步骤如下:(USART 相关 ...
最新文章
- 爱奇艺效果广告的个性化探索与实践
- 电子科技大学计算机学院保研夏令营,电子科技大学计算机科学与工程学院网络空间安全保研夏令营...
- C#让两个长度相同的数组一一对应
- Linux实战教学笔记49:Zabbix监控平台3.2.4(一)搭建部署与概述
- POJ2446 模板盖格子 简单二分匹配
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
- 程序人生:给年轻程序员关于开发过程的10条忠告
- java购物车商品排序_Java购物车
- Markdown: Basics (快速入门)
- MCU破解技术分析(一)
- 欧几里得的尺规(三等分一个线段)
- Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor示例
- 洛谷P3378 【模板】堆
- Oculus消费者版在路上,留给“山寨”VR的时间有多少?
- [下载]最新QQ空间牧场开通器 V2.0
- java银行收费系统界面程序_基于jsp的物业收费管理系统-JavaEE实现物业收费管理系统 - java项目源码...
- 51单片机汇编语言例子,涵盖数码管显示,流水灯,串口,外拓,电子钟,频率计,DA、AD转换等实例
- 向日葵远程控制软件。
- 【测试】嵌入式软件测试VS一般软件测试
- 思考-IT行业设备分销代理商的运营模式