Я пытаюсь использовать ЖК-экран на моем stm32F3discovery. Экран состоит из жк-дисплея на 16 символов в 2 строки и модуля I2C.
Вот ссылка на продукт: https://www.aliexpress.com/item/32763867041.html?spm=a2g0s.9042311.0.0.27424c4dsV7dLS
На обратной стороне экрана я вижу надпись: QAPASS 1602A На микросхеме модуля I2C я вижу надпись: PCF8574T
Вот таблица данных чипа: https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
Я пытался следовать за этим наставником (наиболее близким к тому, что я пытаюсь сделать): https://www.youtube.com/watch?v=1COFk1M2tak
Я использую библиотеку HAL, основная функция для отправки данных - "HAL_I2C_Master_Transmit".
Вот описание функции в "HAL_I2C_Master_Transmit":
- @brief Передает в режиме мастера объем данных в режиме блокировки.
- @param hi2c Указатель на структуру I2C_HandleTypeDef, которая содержит информацию о конфигурации для указанного I2C.
- @param DevAddress Адрес целевого устройства: 7-битное значение адреса устройства в таблице данных должно быть сдвинуто влево перед вызовом интерфейса.
- @param pData Указатель на буфер данных
- @param Size Количество данных для отправки
- @param Timeout Продолжительность тайм-аута
- @retval статус HAL
HAL_StatusTypeDef HAL_I2C_Master_Transmit (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint8_t * pData, uint16_t Size, uint32_t Timeout)
//I initialise a buffer
//I use a for loop to find the address of my slave: 0x3D (even tho on the //datasheet it's 0x3F, looks like A1 is bridged :O )
//I use the HAL_I2C_Master_Transmit function
//I move the address one bit to the left
//I reuse the HAL_I2C_Master_Transmit
//Nothing happens on the screen
//Here is my code (I tried to remove the useless comments):
#include "main.h"
I2C_HandleTypeDef hi2c1; // Init generated bu CubeMX
SPI_HandleTypeDef hspi1; // Init generated bu CubeMX
PCD_HandleTypeDef hpcd_USB_FS; // Init generated bu CubeMX
uint16_t adresseLCD; // the variable I put the slave address on
uint8_t buffer[]="123"; // The buffer I wanna see on the screen
void SystemClock_Config(void); // Generated by CubeMX
static void MX_GPIO_Init(void); // Generated by CubeMX
static void MX_I2C1_Init(void); // Generated by CubeMX
static void MX_SPI1_Init(void); // Generated by CubeMX
static void MX_USB_PCD_Init(void); // Generated by CubeMX
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_SPI1_Init();
MX_USB_PCD_Init();
adresseLCD=0x3D;
HAL_I2C_Master_Transmit(&hi2c1, adresseLCD, buffer, 1, 1000);
adresseLCD=adresseLCD*2; // Yes I could have used "adresseLCD<<1" but I
//am not used to that
HAL_I2C_Master_Transmit(&hi2c1, adresseLCD, buffer, 1, 1000);
while(1)
{
}
}
Я ожидал, что что-то покажет на экране (даже случайные значения), но ничего не появляется (хотя горит). Я не получаю ошибки (только предупреждения, потому что я использую «1» вместо «Pin_ON» при использовании WritePIn)