17.09.2016, 23:15
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
OLED ssd1306 + STM32f030f4
Добрый день. Подключаю дисплей к МК. Нашел либы, кучу всего нашел под I2C интерфейс. Очень долго с ними разбираться. Хочу просто включить экран для начала. Может у кого есть под F030 готовый проект или код который просто запустить? Тот что я нашел написан проффи)) там 3 разных шрифта, куча макросов и т.д. Для быстрого старта от туда долго выпиливать куски буду. По ходу выпиливания еще и надо вникать в суть...
Код для F429 с гитхаба...
|
|
|
|
17.09.2016, 23:40
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Могу под SPI для F10x предложить.
Висит на SPI1.
|
|
|
Сказали "Спасибо" omercury
|
|
|
17.09.2016, 23:57
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Спасибо. Пусть будет на всякий. Покупал было написано SPI, а пришел I2C. Ну я и хотел I2C - меньше проводов...
|
|
|
|
18.09.2016, 01:09
|
#5
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Deley..........
|
|
|
|
18.09.2016, 02:18
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от индюк
|
Deley..........
|
Не нравится название файла?
Мой файл, как хочу - так и обзываю.
Фавориту вон нравится.
Содержимое видели?
Ну и в чём я неправ?
|
|
|
|
18.09.2016, 10:54
|
#7
|
Вид на жительство
Регистрация: 03.06.2006
Адрес: Израиль
Сообщений: 388
Сказал спасибо: 2,063
Сказали Спасибо 337 раз(а) в 156 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Вот, пожалуйста.
За ХАЛ, сильно не пинайте.
|
|
|
|
18.09.2016, 11:14
|
#8
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
AR_Favorit, Не, круче то, что у тебя CVAVR установлен ...
Сообщение от Zoosman
|
За ХАЛ, сильно не пинайте.
|
А что же?
Если не юзать кал, существенно похудеет не только прошивка но и исходник .
Код будет ясный и прозрачный в отличии от "спагетти" кала.
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 18.09.2016 в 11:36.
|
|
|
|
18.09.2016, 11:36
|
#9
|
Вид на жительство
Регистрация: 03.06.2006
Адрес: Израиль
Сообщений: 388
Сказал спасибо: 2,063
Сказали Спасибо 337 раз(а) в 156 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Ну спагеттизмом я даже на АВР не страдал.
А вообще, кто бы спорил. ХАЛ однозначно зло...
Вот мэйн от ОЛЕД:
Нажмите, чтобы открыть спойлер
Код:
|
/**
************************************************** ****************************
* File Name : main.c
* Date : 28/04/2015 10:35:08
* Description : Main program body
* Author : Zoosman
************************************************** ****************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_hal.h"
#include "stm32f0xx_hal_adc.h"
#include ‹string.h›
#include ‹stdlib.h›
#include ‹stdio.h›
#include ‹cstdio›
#include ‹cstdlib›
#include "platform.h"
#include "system.h"
#include "gpio.h"
#include "i2c.h"
#include "dma.h"
#include "usart.h"
#include "utils.h"
#include "adc.h"
#include "ssd1306xled.h"
#include "VW_logo.h"
extern uint8_t limit_sw_status;
void dev_init(void);
void Sample_SimpleRanging(void);
int main(void)
{
HAL_Init();
init_system();
init_gpio();
init_i2c();
init_usart();
init_dma();
init_adc();
ssd1306_init();
ssd1306_fillscreen(1);
// ssd1306_setpos(1,0);
//ssd1306_string_font6x8("Test line 1");
// ssd1306_setpos(20,1);
//ssd1306_string_font6x8("test line 2");
int x_offset = (128 - 48) / 2;
ssd1306_draw_bmp(x_offset, 2, x_offset + 48, 8, matrix);
while (1)
{
// ssd1306_string_font6x8("test screen");
;
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif |
Последний раз редактировалось Zoosman; 18.09.2016 в 11:39.
|
|
|
|
18.09.2016, 11:41
|
#10
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
А вот весь код инита и работы с i2c .
Заметьте что ему уже не во что разворачиваться в отличии от кала и спл.
Нажмите, чтобы открыть спойлер
Код:
|
#define RDA5807_OWN_ADDRESS (0x11)
#define EEPROM_OWN_ADDRESS (0x50)
uint8_t temp1, temp2;
void i2c_init(void)
{
RCC-›AHBENR |= RCC_AHBENR_GPIOFEN;
RCC-›APB1ENR |= RCC_APB1ENR_I2C1EN;
RCC-›CFGR3 |= RCC_CFGR3_I2C1SW;
GPIOF-›AFR[0] |= (1‹‹(4*0)) |(1‹‹(4*1));
GPIOF-›MODER &= ~(GPIO_MODER_MODER0 |GPIO_MODER_MODER1);
GPIOF-›MODER |= (GPIO_MODER_MODER0_1 |GPIO_MODER_MODER1_1);
GPIOF-›OTYPER |=(GPIO_OTYPER_OT_0 |GPIO_OTYPER_OT_1);
I2C1-›TIMINGR = (uint32_t)0x00B01A4B;
I2C1-›CR1 = I2C_CR1_PE;
}
void rda5807_send_reg(uint8_t reg, uint8_t data_h,uint8_t data_l)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (3‹‹16) | (RDA5807_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = reg; /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data_h; /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data_l; /* Byte to send */
}
uint16_t rda5807_read16_reg(uint8_t reg)
{
uint16_t temp=0;
I2C1-›CR2 = (1‹‹16) | (RDA5807_OWN_ADDRESS‹‹1);
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = reg; /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TC) ){};
I2C1-›CR2 = I2C_CR2_AUTOEND | (2‹‹16) |
(RDA5807_OWN_ADDRESS‹‹1) |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_RXNE) ){};
temp = (uint16_t)(I2C1-›RXDR ‹‹8);
while (!(I2C1-›ISR & I2C_ISR_RXNE) ){};
temp |= (uint16_t)I2C1-›RXDR;
return temp;
}
void rda5807_write16_reg(uint8_t reg, uint16_t data )
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (3‹‹16) | (RDA5807_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = reg; /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(data››8); /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(data &0x00FF); /* Byte to send */
}
uint8_t eeprom_read(uint16_t address)
{
uint8_t temp=0;
I2C1-›CR2 = (2‹‹16) | (EEPROM_OWN_ADDRESS‹‹1);
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = (uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FF); /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TC) ){};
I2C1-›CR2 = I2C_CR2_AUTOEND |
(1‹‹16) |
(EEPROM_OWN_ADDRESS‹‹1) |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_RXNE) ){};
temp = I2C1-›RXDR ;
return temp;
}
void eeprom_write(uint16_t address, uint8_t data)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (3‹‹16) | (EEPROM_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR =(uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FF); /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data ; /* Byte to send */
}
void eeprom_pagewrite(uint16_t address, uint8_t *buf,uint8_t nbytes)
{
uint8_t index=0;
I2C1-›CR2 = I2C_CR2_AUTOEND | ((2+nbytes)‹‹16) | (EEPROM_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR =(uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FF); /* Byte to send */
for(index=0;index‹=nbytes-1;index++)
{
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = buf[index] ; /* Byte to send */
}
}
void eeprom_pageread(uint16_t address,uint8_t* buf,uint8_t nbytes)
{
uint8_t index=0;
I2C1-›CR2 = (2‹‹16) | (EEPROM_OWN_ADDRESS‹‹1);
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = (uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FF); /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TC) ){};
I2C1-›CR2 = I2C_CR2_AUTOEND |
(nbytes‹‹16) |
(EEPROM_OWN_ADDRESS‹‹1) |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
I2C1-›CR2 |= I2C_CR2_START; /* Go */
for(index=0;index‹=nbytes-1;index++)
{
while (!(I2C1-›ISR & I2C_ISR_RXNE) ){};
buf[index] = I2C1-›RXDR ;
}
} |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:55.
|
|