【NUCLEO H533RE】OLED SSD1306屏SPI接口测试
[复制链接]
1、测试介绍
本次测试主要为NUCLEO-H533RE的SPI接口外设 Master Half-Duplex模式测试,测试验证SPI的编程流程。测试使用了0.96英寸OLED屏,驱动类型为SSD1306芯片。
SSD1306有IIC和SPI两种接口模式,本次测试使用SPI模式。NUCLEO-H533RE使用SPI 外设Master Half-Duplex模式。测试显示字符串。
2、硬件连接
主要有两个硬件
SSD1306 SPI和NUCLEO-H533RE
VCC 3.3 GND
D0 <===> PC1 MOSI
D1 <===> PC1 SCLK
RES <===> PC1 GPIO
DC <===> PA1 GPIO
3、参数配置
参数设置主要为系统时钟和SPI外设的参数。
(1) 系统设置外部24M晶振,系统时钟250Mhz,PLL2Q的时钟为4MHZ
(2)SPI时钟设置
将SPI的时钟设置为PLL2Q,即SPI4的时钟为4MHZ。
(3) SPI参数模式
SPI模式为Master Half-Duplex模式,PC1为MOSI ,PA0 SCLK。数据位8bit,速率控制为2MHZ
这里通过Prescale控制SPI的速率。过快的速度可能造成SSD1306无法工作。
(4)GPIO设置
将PB1和PA1设置为输出模式。
4、程序与工作原理
程序主要为SSD1306驱动和字体文件组成。详细代码参考附录程序
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
/* USER CODE END 2 */
/* Initialize leds */
BSP_LED_Init(LED_GREEN);
/* Initialize USER push-button, will be used to trigger an interrupt each time it's pressed.*/
BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
/* Initialize COM1 port (115200, 8 bits (7-bit data + 1 stop bit), no parity */
BspCOMInit.BaudRate = 115200;
BspCOMInit.WordLength = COM_WORDLENGTH_8B;
BspCOMInit.StopBits = COM_STOPBITS_1;
BspCOMInit.Parity = COM_PARITY_NONE;
BspCOMInit.HwFlowCtl = COM_HWCONTROL_NONE;
if (BSP_COM_Init(COM1, &BspCOMInit) != BSP_ERROR_NONE)
{
Error_Handler();
}
/* USER CODE BEGIN BSP */
/* -- Sample board code to send message over COM1 port ---- */
printf("Welcome to STM32 world !\n\r");
// ssd1306_SetCursor(0, 0);
// ssd1306_WriteString(title, Font_11x18, White);
// ssd1306_UpdateScreen();
/* -- Sample board code to switch on leds ---- */
BSP_LED_On(LED_GREEN);
/* USER CODE END BSP */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* -- Sample board code for User push-button in interrupt mode ---- */
if (BspButtonState == BUTTON_PRESSED)
{
/* Update button state */
BspButtonState = BUTTON_RELEASED;
/* -- Sample board code to toggle leds ---- */
BSP_LED_Toggle(LED_GREEN);
/* ..... Perform your action ..... */
}
ssd1306_SetCursor(0, 0);
ssd1306_WriteString(timerStr, Font_11x18, White);
ssd1306_UpdateScreen();
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
5、测试过程
烧写程序运行
|