本帖最后由 jinglixixi 于 2021-1-25 21:25 编辑
板载的外设资源稍显单薄,为此首要的任务是为它建立一个人机交互的窗口,这里是使用Arduino接口来接入一个I2C接口的单色OLED 屏。由于显示屏的引脚与Arduino接口存在差异,故将OLED屏的方向做了180度的旋转,以免连线的麻烦,OLED 屏的显示效果如下图所示。 显示效果图 OLED 屏与MCU的连接关系为: SCL---PB9 SDA---PB8 使相关引脚输出高低电平的语句定义如下: #define OLED_SCLK_Set() GPIOB->BSRE = GPIO_Pins_9 #define OLED_SCLK_Clr() GPIOB->BRE = GPIO_Pins_9 #define OLED_SDIN_Set() GPIOB->BSRE = GPIO_Pins_8 #define OLED_SDIN_Clr() GPIOB->BRE = GPIO_Pins_8 设置相关引脚为输出功能的配置函数为: - void AT32_OLED_Init(void)
- {
- GPIO_InitType GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
- GPIO_StructInit(&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pins = GPIO_Pins_8|GPIO_Pins_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
- GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
由于输出速度比较快,因此相关的辅助函数需添加一点的延时,否则将影响显示,以函数IIC_Start()为例,其修改后的内容为“” - void IIC_Start()
- {
- OLED_SCLK_Set();
- Delay_us(1);
- OLED_SDIN_Set();
- Delay_us(1);
- OLED_SDIN_Clr();
- Delay_us(1);
- OLED_SCLK_Clr();
- Delay_us(1);
- }
实现字符串显示的函数为: - void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
- {
- unsigned char j=0;
- while (chr[j]!='\0')
- {
- OLED_ShowChar(x,y,chr[j],Char_Size);
- x+=8;
- if(x>120){x=0;y+=2;}
- j++;
- }
- }
形成显示效果的主程序为: - int main(void)
- {
- AT32_Board_Init();
- AT32_OLED_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"AT-START-F407",16);
- OLED_ShowString(0,2,"OLED DISPLAY",16);
- Delay_ms(1000u);
- while(1);
- }
有了OLED屏的显示功能,后边的数值显示任务就全交给它了!
|