登录
【中科昊芯Start_DSC28027勇士开发板试用体验】串口与上位机通信
开发板试用精选
2022-11-21
937
分享海报
开发板试用精选
807 文章
83.8w阅读
142粉丝
+关注
描述
本文来源电子发烧友社区,作者:jf_53933321, 帖子地址:
https://bbs.elecfans.com/jishu_2287001_1_1.html
上一篇讲了pwm,这一篇来介绍下串口的试用。
1. 串口
通信
介绍
串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
2. haawking勇士板上的串口
从原理图上可以看到串口发送和接收管脚通过ch340g芯片转成了miniusb接口,用miniusb转usb的数据线就可以把电脑和板子接起来。
CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。
在串口方式下,CH340 提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB 总线。
在红外方式下,CH340 外加红外收发器即可构成USB 红外线适配器,实现SIR 红外线通讯。
3. 上代码
如前面原理中所说通信双方
需要约定一致的数据包格式,我在实验中用9600波特率,数据位8位、无校验位,停止位为1。向电脑端发送一些配置信息后,输出hello haawking!。代码如下。
/*主程序入口*/
int main(void)
{
/*初始化系统控制*/
InitSysCtrl();
/*初始化内存控制寄存器,使能内存流水线模式*/
InitFlash();
/*初始化串口通信的GPIO口*/
/*GPIO28: SCIRXDA*/
/*GPIO29: SCITXDA*/
InitSciGpio();
/*关闭中断*/
DINT;
/*初始化PIE控制*/
InitPieCtrl();
/*关闭CPU中断,清除中断标志位*/
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断向量表*/
InitPieVectTable();
/*SCI寄存器配置*/
Scia_Config(9600);
/*使能外部中断和CPU中断*/
EINT;
/*通过SCI发送字符串*/
Scia_Print("--------- sci interrupt test ----------rn");
Scia_Print("Baud Rate: 9600rn");
Scia_Print("Data Bits: 8rn");
Scia_Print("Parity: nonern");
Scia_Print("Stop Bits: 1rn");
Scia_Print("Hello Haawking!rn");
Scia_Print("rn");
for (;;)
{
}
return 0;
}
复制代码
/******************************************************************
*函数名:Scia_Config(uint32 baud)
*参 数: baud,串口波特率
*返回值:无
*作 用: SCIA 初始化配置
******************************************************************/
void Scia_Config(uint32 baud)
{
uint32 div = 0;
uint32 divsel = 0;
uint32 lospcp = 0;
uint32 lspclk = 0;
uint16 brr = 0;
//获取系统时钟的倍频、分频和低速外部时钟的值
div = SysCtrlRegs.PLLCR.bit.DIV;
divsel = SysCtrlRegs.PLLSTS.bit.DIVSEL;
lospcp = SysCtrlRegs.LOSPCP.bit.LSPCLK;
if (lospcp != 0)
{
lospcp = lospcp * 2;
}
else
{
lospcp = 1;
}
/*分频值设置
divsel为 0时,系统时钟4分频
divsel为 1时,系统时钟4分频
divsel为 2时,系统时钟2分频
divsel为 3时,系统时钟1分频*/
switch (divsel)
{
case 0:
case 1:
lspclk = 12000000 * div / 4 / lospcp;
break;
case 2:
lspclk = 12000000 * div / 2 / lospcp;
break;
case 3:
lspclk = 12000000 * div / 1 / lospcp;
break;
}
brr = lspclk / (baud * 8) - 1;
/*SCI 停止位设置 0:一个停止位 1:两个停止位*/
SciaRegs.SCICCR.bit.STOPBITS = 0;
/*SCI 奇偶校验位 0:奇偶校验 1:偶偶校验*/
SciaRegs.SCICCR.bit.PARITY = 0;
/*SCI 奇偶校验使能 0:关闭 1:启用*/
SciaRegs.SCICCR.bit.PARITYENA = 0;
/*SCI 字符长度 0:1个字长 1:2个字长 ... 7:8个字长*/
SciaRegs.SCICCR.bit.SCICHAR = 7;
/*使能SCI的发送机和接收机*/
SciaRegs.SCICTL1.bit.TXENA = 1;
SciaRegs.SCICTL1.bit.RXENA = 1;
/*SCI 16位波特率选择寄存器 高8位*/
SciaRegs.SCIHBAUD = (uint8) ((brr >> 8) & 0xff);
/*SCI 16位波特率选择寄存器 低8位*/
SciaRegs.SCILBAUD = (uint8) (brr & 0xff);
/*SCI 发送中断使能*/
SciaRegs.SCICTL2.bit.TXINTENA = 1;
/*SCI 接收中断使能*/
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
/*SCI 指定发送和接收中断处理函数,该寄存器受EALLOW保护*/
EALLOW;
PieVectTable.SCIRXINTA = &sciaRxIsr;
PieVectTable.SCITXINTA = &sciaTxIsr;
EDIS;
/*PIE Group 9, SCIRXINTA*/
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
/*PIE Group 9, SCITXINTA*/
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
IER_ENABLE(M_INT9);
/*SCI 软件复位,重新启动SCI*/
SciaRegs.SCICTL1.bit.SWRESET = 1;
}
复制代码
4. 实际运行效果
在电脑端打开串口调试助手,打开对应串口,设置9600波特率,数据位8位、无校验位,停止位为1,信息显示为ascii,板子上电之后就会在串口调试助手里接收到hello haaking!信息。截图如下。
打开APP阅读更多精彩内容
点击阅读全文
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
中科昊芯
开发板试用
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】开箱开机体验
开发板
DSC
行业
芯
事
经验分享
tymark
2022-07-15
中科
昊
芯
Start_DSC
28034PNT湖人
开发板
首发
试用
2022-04-12
0
中科
昊
芯
科技
Start_DSC28027
勇士
开发板
首发
试用
2022-04-12
0
【RISC-V专题】
中科
昊
芯
Start_DSC28027
勇士
开发板
首发
试用
2022-04-14
0
【RISC-V专题】
中科
昊
芯
Start_DSC
28034PNT湖人
开发板
首发
试用
2022-04-14
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】
勇士
板
开箱
2022-06-12
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】点灯
2022-06-12
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】
串口
与
上位
机
通信
2022-06-15
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】-开箱
2022-07-13
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】--我的HelloWorld
2022-07-14
0
【
中科
昊
芯
Start_DSC28027
勇士
开发板
试用
体验】-开箱
试用
2022-11-21
503
全部
0
条评论
快来发表一下你的评论吧 !
发送
登录/注册
×
20
完善资料,
赚取积分