本次测试的是SPI通讯使用的是OLED屏,内置的是SSD1306芯片,这个芯片可以使用SPI和I2C接口。
测试的过程很是曲折,首先遇到的坑就是H563ZI的引脚,板子的引脚设计成和ARDUINO兼容地,所以焊有引脚的接口是ARDUINO的接口,其它的引脚没有焊接口,开始的时候我选择了CN7的引脚和SPI1接口,结果引脚和板子上的设备有冲突,后来在认真的查看了原理图之后,试了多次才找到合适的引脚,使用的引脚为CN8和SPI3接口
主要的配置:
PC10 <--> D0 SPI3_SCK
PC12 <--> D1 SPI3_MOSI
PG3 <--> RES
PG2 <--> DC
电源和地
注意SPI3接口,分频:128,数据位:8bit
设置完成后,生成程序。程序主要是两个ssd1306_fonts.c和ssd1306.c,这是我以前找的SSD1306的驱动,将内容修改成需要的。
主程序较为简单
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ICACHE_Init();
MX_ADC1_Init();
MX_USART3_UART_Init();
MX_SPI3_Init();
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
ssd1306_SetCursor(0, 0);
ssd1306_WriteString(sayStr, Font_11x18, White);
printf("Hello,world!\n");
ssd1306_UpdateScreen();
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
先进行初始化,然后显示就可以了
效果如图
后记:
较早的设计SPI或I2C常常使用GPIO模拟的方法,但是随着MCU性能的提高,各种的外设已经十分的齐备,在硬件不冲突的情况下,应该优先使用集成的硬件SPI、I2C,这些在RTOS中更是如此。
|