1.开箱上电 乘此次活动的机会,首次申请到AC7811-MINI开发板,它为了解其性能和掌握其开发提供了硬件方面的支持。AC7811-MINI开发板就整体来讲是一个基于AC7811的最小系统,基本上将全部的引脚资源全与排针的方式提供给了用户,这为用户免除了手工焊制芯片的麻烦。此外,在构建专业功能时还可以将其作为一个核心模块来配合功能板进行使用。 接到开发板的首要工作就是上电看一下出厂的DEMO演示效果,在用USB线连好电脑和开发板后,除板上的电源指示灯点亮外,就是用户LED再闪烁着,如图1所示。 图1 上电效果
2.构建开发环境 就个人使用的习惯讲,本人是使用KEIL作为开发工具,所用的版本为V5.23。 在安装KEIL软件后,还需下载安装AutoChips.AC781x_DFP.1.0.8以获得对开发板的芯片支持,如图2所示。 图2 获得芯片支持 为便于下载测试,本人是使用串口通信来进行程序的下载。测试的程序可使用厂家提供的demo示例,为便于观察效果可见循环语句注释掉,则用户LED会持续点亮,经编译其界面如图3所示。
图3 完成编译 在程序下载方面,本人使用的程序通讯。在下载前需安装ATC_MCU_ISPTool V3.1,其界面如图4所示。
图4 下载界面 在下载时,需用导线来连接BOOT和VCC引脚,下载后再断开连接重新上电方可见到演示效果。
图5 完成下载 经验证下载功能有效、正常,为后续的例程验证和开发提供了有力地支持。 从使用角度看,在下载方面还应稍加改进,例如在ISP下载时,需要将BOOT和VCC进行短接,但两者间却隔着一个引脚,不便用短接子来实现。还有就是通讯接口在下载时若使用自己配备的USB转TTL通讯模块,会因引脚的间距过小而不便连接。 3.例程测试 在AC781x范例代码中,提供了较为丰富的例程资源,通过它可以学习编程技巧及拓展应用功能等,对它的验证具有较重要的作用。 I2C_OLED 屏幕测试: OLED例程提供了一个对I2C接口的OLED屏的驱动示例,它主要是使用I2C 2这个接口来驱动OLED屏。
其中:OLED屏的SDA连接PC6,OLED屏的SCL连接PC5。
OLED屏的演示主程序如下: int main(void)
{
InitDelay();
InitDebug();
OLED_Init();
OLED_Clear();
while(1)
{
OLED_Clear();
OLED_ShowString(0, 0, "OLED Demo", 8);
OLED_DrawBMP(64, 4, 128, 8, g_atc**BMP);
mdelay(8000);
mdelay(8000);
mdelay(8000);
mdelay(8000);
}
}
其演示的效果如图6所示。
图6 OLED屏演示效果
RTC测试: RTC例程是一个RTC示例,它主要是以OLED屏和串行通讯为显示工具。 其中:OLED屏的SDA连接PC6,OLED屏的SCL连接PC5。 其主程序如下: int main(void)
{
uint32_t tmpMod = 99;
uint32_t tmpPrescalerValue = 0x752ff; //480000*100/48000000 = 1s
RTC_ConfigType RTCConfig = {0};
InitDelay();
InitDebug();
OLED_Init(); //initial OLED
OLED_Clear(); // Initialize debug UART 1
printf("\r\nAC7811: RTC_Demo\r\n");
RTCConfig.clockSource = 0; //clk source :48MHz
RTCConfig.moduloValue = tmpMod;
RTCConfig.interruptEn = ENABLE;
RTCConfig.prescalerValue = tmpPrescalerValue; //time = (pre+1)*(mod+1)/clk
RTCConfig.RTCOut = ENABLE;
RTC_SetEventCallback(RTCCallBackFunc);
RTC_Initialize(&RTCConfig);
OLED_ShowString(0, 0, "RTC Demo", 8);
OLED_DrawBMP(64, 4, 128, 8, g_atc**BMP);
OLED_ShowString(0, 2, "current time is:", 8);
while(1);
}
其中通信串口的显示如图9所示,它是通过RTC每秒产生一次中断来进行串口输出和OLED屏更新,OLED屏更新RTC计时值的效果如图10所示。 图6 RTC演示效果 RTC中断处理函数为: int32_t RTCCallBackFunc(uint32_t wparam, uint32_t lparam )
{
static uint32_t s_clkCounter = 1;
RTC_ClockDisplay(s_clkCounter);
printf("RTC CallBack Function,counter:%d\r\n", s_clkCounter++);
return 0;
}
图10 RTC演示效果 OLED屏的显示函数为: void RTC_ClockDisplay(uint32_t counter)
{
uint32_t tempHour = 0, tempMin = 0, tempSec = 0;
tempSec = counter % 60;
tempMin = (counter / 60) % 60;
tempHour = (counter / 3600) % 60;
OLED_ShowChar(0, 3, tempHour / 10 + '0', 8);
OLED_ShowChar(8, 3, tempHour % 10 + '0', 8);
OLED_ShowString(16, 3, ":", 8);
OLED_ShowChar(24, 3, tempMin / 10 + '0', 8);
OLED_ShowChar(32, 3, tempMin % 10 + '0', 8);
OLED_ShowString(40, 3, ":", 8);
OLED_ShowChar(48, 3, tempSec / 10 + '0', 8);
OLED_ShowChar(56, 3, tempSec % 10 + '0', 8);
}
|