纳瓦特又推出了新的开发板,在颜色上则由原来蓝色改为了更薄的绿色板。此外,在器件方面也做了些调整,将原来的RGB LED改为了3个独立的红色LED,在原复位键的基础上又新增了2个小按键,这样会更加便于人机交互的验证和使用。
可能是出于同其他下载器兼容的需要,新版上的下载器接口由原来的6线式变为了5线式,所以在直接使用的情况下是无法完成程序下载的。其解决之道就是自制一个具有线序调整作用的转换排插,将原来的线序:GND、3V3、RST、SWD、DIO、CLK 改为GND、3V3、RST、DIO、CLK、SWD接口。 似乎是推出的太仓促,网上没能找到新版的原理图,为此特意实测了一下相关器件的连接情况,在此与大家分享。 (1)CH0-PC0 CH1-PC1 CH2-PB5 CH3-PC3 CH4-PB4 CH5-PC2 (2)D2-PH1 D3-PH2 D4-PE7 (3)KBI0-PA0 KBI1-PD0 要使用好纳瓦特开发板,首先要做好两件事,一是安装好相应的开发工具软件如KEIL(先前只提供KEIL的例程、现在已提供了对IAR的支持),二是安装好STLINK V2驱动及虚拟串口的驱动。
图1 基于KEIL的开发环境
图2 基于IAR的开发环境
下载链接参考如下: MDK下载地址 链接:http://pan.baidu.com/s/1hsyfb5i 密码:6hyu STLINK V2驱动 链接: st-link_v2_usbdriver.zip 在安装虚拟串口驱动后,在设备管理器可见到图3的虚拟串口。
图3 虚拟串口
然后可在GPIO_demo的基础上,进行相应的移植,实现OLED屏的显示功能,其显示效果如图4所示。 由于OLED屏采用IIC接口,故只占用2个GPIO口即可使其工作,它与开发板的连接关系为: SCL-- PE1 、SDA-- PE0
图4 OLED屏显示效果
使OLED屏工作的相关定义如下: - #define OLED_MODE 0
- #define SIZE 8
- #define XLevelL 0x00
- #define XLevelH 0x10
- #define Max_Column 128
- #define Max_Row 64
- #define Brightness 0xFF
- #define X_WIDTH 128
- #define Y_WIDTH 64
- #define OLED_SCLK_Clr() GPIO_PinClear(GPIO_PTE1);
- #define OLED_SCLK_Set() GPIO_PinSet(GPIO_PTE1);
- #define OLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0);
- #define OLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);
- #define OLED_CMD 0
- #define OLED_DATA 1
复制代码OLED屏的初始化函数为: - void OLED_Init(void)
- {
- //SSD1306
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- Delay_1ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
- OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
- OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
- OLED_WR_Byte(0x00,OLED_CMD);//
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
- OLED_WR_Byte(0x80,OLED_CMD);//
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
- OLED_WR_Byte(0x05,OLED_CMD);//
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
- OLED_WR_Byte(0xF1,OLED_CMD);//
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
- OLED_WR_Byte(0x12,OLED_CMD);//
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
- OLED_WR_Byte(0x30,OLED_CMD);//
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
- OLED_WR_Byte(0x14,OLED_CMD);//
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
- }
复制代码在自定义小字库的情况下,实现相应显示界面的主程序如下: - int main (void)
- {
- /* Perform processor initialization */
- sysinit();
- cpu_identify();
- RTC_ConfigType sRTCConfig;
- RTC_ConfigType *pRTCConfig = &sRTCConfig;
- printf("\nRunning the GPIO_demo project.\n");
- /* configure RTC to 1Hz interrupt frequency */
- pRTCConfig->u16ModuloValue = 9;
- pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE; /* enable interrupt */
- pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ; /*clock source is 1khz*/
- pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100; /*prescaler is 100*/
- RTC_SetCallback(RTC_Task);
- RTC_Init(pRTCConfig);
- GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE0_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE1_MASK, GPIO_PinOutput);
- OLED_Init();
- OLED_Clear();
- cd11();
- OLED_ShowString(32,6,"2016.7.2",16);
- while (1);
- }
复制代码 |