参照网上例程,学习了下SCI发送数据。
CCS使用小结:
1、Ctrl + / 注释代码很方便
2、CCS项目管理中,不要轻易删除某个.c或.h的文件。在MDK或者IAR中,删了只是把文件从工程项目中去掉,文件还在。而在CCS中,删了真的就没有了,真的没有了。
3、赞一个,CCS5.4对中文支持做的不错,不像MDK,动不动就乱码。
main.c
[cpp] view plain copy
/* Includes ------------------------------------------------------------------*/
#include
#include
#include "SystemInit.h"
#include "SubFunction.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void main(void)
{
InitSysCtrl(); // 系统控制初始化
InitGpio(); // GPIO 初始化
PieVectTable_Configure(); // 中断向量表初始化
LED_Configure(); // LED 引脚配置
// EXTI_Configure(); // 按键中断配置
SCI_Configure(); // SCI 初始化
while(1){
SCI_PrintfStringTest();
LED_Blink();
}
}
为了使main里面不至于看起来那么,把中断向量表初始化和LED配置放这里了 SystemInit.c
[cpp] view plain copy
/* Includes ------------------------------------------------------------------*/
#include
#include
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name : PieVectTable_Configure
* Description : 配置PIE中断向量表
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void PieVectTable_Configure(void)
{
DINT;
InitPieCtrl();
// 禁止CPU中断
IER = 0x0000;
// 清楚CPU所有中断标志
IFR = 0x0000;
// 位向量表中的所有中断向量配置对应的入口地址
InitPieVectTable();
EINT;
}
/*******************************************************************************
* Function Name : LED_Configure
* Description : 配置LED对应GPIO
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LED_Configure(void)
{
// 允许访问受保护的空间
EALLOW;
// 配置LED0、1、2、3 对应的 GPIO0、1、2、3为输出IO
GpioCtrlRegs.GPADIR.all=0x000f;
// 禁止访问受保护的空间
EDIS;
}
/*******************************************************************************
* Function Name : LED_Blink
* Description : LED流水灯
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LED_Blink(void)
{
GpioDataRegs.GPATOGGLE.bit.GPIO0=1; //电平翻转
DELAY_US(100000L); //延时
GpioDataRegs.GPATOGGLE.bit.GPIO1=1;
DELAY_US(100000L);
GpioDataRegs.GPATOGGLE.bit.GPIO2=1;
DELAY_US(100000L);
GpioDataRegs.GPATOGGLE.bit.GPIO3=1;
DELAY_US(100000L);
}
SCI配置 SCI_Configure.c
[cpp] view plain copy
/* Includes ------------------------------------------------------------------*/
#include
#include
#include "C2000_it.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define CBR_110 11E1
#define CBR_300 3E2
#define CBR_600 6E2
#define CBR_1200 12E2
#define CBR_2400 24E2
#define CBR_4800 48E2
#define CBR_9600 96E2
#define CBR_14400 144E2
#define CBR_19200 192E2
#define CBR_38400 384E2
#define CBR_56000 56E3
#define CBR_57600 576E2
#define CBR_115200 1152E2
#define CBR_128000 128E3
#define CBR_256000 256E3
#define CPU_FREQ 60E6
#define LSPCLK_FREQ (CPU_FREQ/4)
#define SCI_BAUD(baud) (LSPCLK_FREQ/(baud*8))-1
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/****************************************************************************
* Function Name : SCI_Configure
* Description : SCI 引脚和参数配置
* Input : None
* Output : None
* Return : None
******************************************************************************/
void SCI_Configure(void)
{
EALLOW;
// GPIO28/SCI_RX,配置成上拉输入,输入限定脉冲周期为3*2=6个时钟周期
GpioCtrlRegs.GPADIR.bit.GPIO28 = 0; // 配置为输入
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // 使能上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // 配置 GPIO28 为SCI_RX
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // 限定输入脉冲为6
// GPIO29/SCI_TX,配置为无上拉输出
GpioCtrlRegs.GPADIR.bit.GPIO29 = 1; // 配置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1; // 禁止上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // 配置 GPIO29 为SCI_TX
SciaRegs.SCICTL1.bit.SWRESET = 0; // 复位SCI寄存器
SciaRegs.SCICTL1.bit.SWRESET = 1; // 完成复位
// 配置SCI 8位数据位,1个停止位,无校验,波特率 115200
SciaRegs.SCICCR.bit.STOPBITS = 0; // 0:1个停止位 1:两个停止位
SciaRegs.SCICCR.bit.PARITY = 0; // 0:奇校验 1:偶校验
SciaRegs.SCICCR.bit.PARITYENA = 0; // 0:禁止校验 1:允许校验
SciaRegs.SCICCR.bit.SCICHAR = 7; // 7:数据位8位
SciaRegs.SCIHBAUD = 0;
SciaRegs.SCILBAUD = SCI_BAUD(CBR_115200);
SciaRegs.SCICTL1.bit.RXENA = 1; // 0:禁止接收 1:使能接收
SciaRegs.SCICTL1.bit.TXENA = 1; // 0:禁止发送 1:使能发送
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; // 0:禁止接收中断 1:允许接收中断
SciaRegs.SCICTL2.bit.TXINTENA = 0; // 0:禁止发磅中断 1:允许发送中断
EDIS;
}
/****************************************************************************
* Function Name : SCI_SendByte
* Description : SCI 发送一个字节
* Input : unsigned char TxByte:待发送的字节
* Output : None
* Return : None
******************************************************************************/
void SCI_SendByte(unsigned char TxByte)
{
while(SciaRegs.SCICTL2.bit.TXRDY != 1);
SciaRegs.SCITXBUF = TxByte;
}
/****************************************************************************
* Function Name : SCI_PrintfStringTest
* Description : SCI 发送一个字符串测试
* Input : None
* Output : None
* Return : None
******************************************************************************/
void SCI_PrintfStringTest(void)
{
unsigned char retry = 0;
char buff[] = "\nwww.ccnu.edu.cn";
for(retry=0; retry!=sizeof(buff); ++retry){
SCI_SendByte(buff[retry]);
}
}
好像没啥总结的,跟其他MCU差不多