学东西就是要趁热打铁,这样进步才能更快,这不,今天继续跟大家分享下我用上位机控制小灯的实验。
在第二篇学习之旅中,我已经完成了串口的基本调试,在第一篇完场了led的点亮的实验,那么接下来自然而然的想到了将两个实验合并成一个,这样做既巩固了前面学到的知识,同时也增加了自己学习的兴趣,自娱自乐吗 。
个人感觉这个实验实用性还可以,因为它基本表达了一种简单控制流程,通过上位机控制目标板,从而完成一些基本控制动作,同时在动作完成后回传信息进行反馈。下面就是我的代码:
#include "LPC13xx.h"
#include "gpio.h"
#include "uart.h"
#include<stdio.h>
#include<string.h>
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
extern volatile uint32_t UARTCount;
extern volatile uint8_t UARTBuffer[BUFSIZE];
uint8_t UartRecChar(void)
{
while ( UARTCount == 0 );
LPC_UART->IER = IER_THRE | IER_RLS; /* Disable RBR */
UARTCount = 0;
LPC_UART->IER = IER_THRE | IER_RLS | IER_RBR; /* Re-enable RBR */
return UARTBuffer[0];
}
//////////////////////////////////////////
void Ledon(void)
{
GPIOSetValue( PORT0, 7, 1 );
}
//////////////////////////////////////////
void ledoff(void)
{
GPIOSetValue( PORT0, 7, 0 );
}
int main(void)
{
uint8_t Key;
// TODO: insert code here
UARTInit(115200);
GPIOInit();
GPIOSetDir( PORT0, 7, 1 );
GPIOSetValue( PORT0, 7, 0 );
UARTSend("LPC1343test\n",sizeof("LPC1343test\n"));
while (1)
{
Key = UartRecChar();
switch(Key)
{
case'o':
Ledon();
UARTSend("led on\n",sizeof("led on\n"));
break;
case'c':
ledoff();
UARTSend("led off\n",sizeof("led off\n"));
break;
default:break;
}
}
// Enter an infinite loop, just incrementing a counter
return 0 ;
}
由于本人不是软件出身,都是临时学习的,所以不是很规范,肯定会有些问题的,还希望大家给些知道建议,说到这,有几个问题咨询下大家,
图中出现了很多感叹号,其提示内容为:pointer targets in passing argument 1 of 'UARTSend' differ in signedness
我不太明白,高人指教下。:(
代码编译通过,没有产生错误。。。。然后进入“小甲虫”模式(debug),打开我的串口调试助手,运行出现以下画面
程序运行起来了,呵呵,板子正在等待我的命令,然后我发送字母o,打开小灯的操作
这时板子上的led被点亮了,兴奋下。。。 然后再发送c,关闭小灯的命令
板子上的小灯就关闭了,呵呵,简单的控制完成了!!
这是我的第一个“控制流”,后续会继续完善其他LPC1343的测试。
心得体会:综合了前面学习的知识,参考了版主tiankai001的学习帖子,再融合一下自己的想法,完成了这次的调试实验。
关键是要找到一个应用点,然后根据这个应用来武装自己的LPC1343板子,从硬件到软件,这样学习的效率会
更高,后续我将调试i2c接口,这样又可以增强趣味了呵呵,希望大家一起努力!