1前言
上次试了官方的例程,闪灯Blinky例程,但实际对软件熟悉度不够,虽然功能已经完成,能够正常跑实际收获不大,今天再认真学习一些Simplicity Studio v5这个软件,然后试下开发板的别的功能,最先肯定是调试一下打印信息串口,这样可以观察程序的进度。开发板上的调试串口应该是接在P0.4和P0.5上面,说实话好几年没调试C51内核的单片机了,一些寄存器都忘了,目前基本上都是ARM内核了,哈哈。找一下手册看下P0.4和P0.5是uart0,正好可以跑一跑例程测试一下,哈哈。
2.熟悉软件
熟悉软件操作,想看当前函数的定义,点击Open Declaration 可以直接跳转到函数定义。
跳转到我选择的函数了,这些功能都是比较常用的,开发的时候会经常使用。
3. 板子内核时钟选择
在板子上没看见外部晶振,估计是用的内核晶振
看了一下手册,有这些选择,但是在程序里没找到对应的设置,这里不是很清晰啊。
extern void CLOCK_0_enter_DefaultMode_from_RESET(void) {
// $[HFOSC1 Setup]
// [HFOSC1 Setup]$
// $[CLKSEL - Clock Select]
/***********************************************************************
- Clock derived from the Internal High Frequency Oscillator 0
- SYSCLK is equal to selected clock source divided by 1
***********************************************************************/
SFRPAGE = 0x0;
CLKSEL = CLKSEL_CLKSL__HFOSC0_clk24p5 | CLKSEL_CLKDIV__SYSCLK_DIV_1;
while ((CLKSEL & CLKSEL_DIVRDY__BMASK) == CLKSEL_DIVRDY__NOT_READY);
// [CLKSEL - Clock Select]$
// $[CLKGRP0 - Clock Group 0]
// [CLKGRP0 - Clock Group 0]$
}
仔细找了一下,这个函数应该就是初始化时钟,24.5Mhz的主频,后面应该是分频系数。
4. 串口测试
首先打开程序进行编译,通过后
主函数:
void main (void)
{
unsigned char inputcharacter; // Used to store character from UART
enter_DefaultMode_from_RESET();
DISP_EN = DISP_BC_DRIVEN; // EFM8 does not drive display
BC_VCOM_EN = BC_VCOM_CONNECTED; // Board controller connected to EFM8
// UART pins
SCON0_TI = 1; // This STDIO library requires TI to
// be set for prints to occur
while (1)
{
RETARGET_PRINTF ("\nEnter character: ");
inputcharacter = getchar();
RETARGET_PRINTF ("\nCharacter entered: %c", inputcharacter);
RETARGET_PRINTF ("\n Value in Hex: %bx", inputcharacter);
}
}
串口打印信息:
串口就调通了,可以正常打印数据。也可以接收数据,就是这个初始化函数有点没搞清楚在哪?哈哈。这个例程就在SDK包里,基本上外设操作都有例程,这个对开发项目还是很友好的,不错不错。
这个串口波特率我改9600和115200都可以接受,估计加了芯片自适应了,MCU输出应该是115200的。
下一步准备在这个程序的基础上,加一个单总线的温度传感器,采集温度,通过串口打印出来,如果还有时间加一个lora射频板,通过uart1发送数据,组成无线温度传感器。