02.10.2016, 21:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от NewWriter
|
Вообще-то, дисплей должен всегда быть подключен.
|
Ну да )) Просто я гдето находил в сети (сейчас не нашел) где человек скачал чужую либу I2C и там она при сбоях зависала. Вот я и думал чтото на подобе сделать. Но впринципе то и да - без дисплея делать нечего. ))
|
|
|
|
02.10.2016, 21:21
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Заходишь таймер. Перед блокирующий проверкой флагов и2с заряжаешь таймер. В проверке флагов проверяешь и таймер , если обнулится делаешь выход из функции с возвращение кода ошибки.
Счас на смарте, завтра более подробно.
У New Writer SPI там и таймаут не так критичен да и зависнуть сложно...
__________________
Осторожно , злой кот
|
|
|
|
02.10.2016, 23:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Timeout register (I2C_TIMEOUTR) - а для чего вот этот регистр у Ф030 ?
У 103-ей серии вроде в регистрах есть таймаут?
Я понимаю что дисплей должен быть включен всегда, но вот я его поставлю в машину и еще еепром будет писать иногда. Если дисплей "втыкнет" то надо чтоб еепромка работала. Примерно для этого хочу сделать чтото подобное таймауту. Буду ждать завтра dosikus...
|
|
|
|
03.10.2016, 09:39
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
в main
Код:
|
static volatile uint32_t TimingDelay;
static volatile uint32_t TimeOut;
void SysTick_Handler(void)
{
if (TimingDelay) {
TimingDelay--;
}
if (TimeOut) {
TimeOut--;
}
} |
в модуле
Код:
|
extern uint32_t TimeOut;
#define SSD1306_OWN_ADDRESS 0x3C// 0x3D
#define I2C_TIMEOUT 25
int ssd1306_send(uint8_t control_byte, uint8_t data)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (2‹‹16) | (SSD1306_OWN_ADDRESS‹‹1);
TimeOut=I2C_TIMEOUT;
while (!(I2C1-›ISR & I2C_ISR_TXE) )
{
if(!TimeOut) return -1;
}
I2C1-›TXDR = control_byte;
I2C1-›CR2 |= I2C_CR2_START;
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data;
return 0;
} |
Проверяешь выхлоп ssd1306_send() и делаешь выводы.
На счет I2C_TIMEOUTR ,оно вроде только к SMBUS , но ты покопай и нам расскажешь...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
05.10.2016, 21:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Купил стм32ф030с8т6.
Подключил Этот дисплей на В6, В7. Шина молчит.... Можнт я чтото опять не то делаю?
Подскажите плиз...
PHP код:
|
void Init_I2C(void) { I2C_InitTypeDef i2c; RCC-›AHBENR |= RCC_AHBENR_GPIOBEN; RCC-›APB1ENR |= RCC_APB1ENR_I2C1EN; RCC-›CFGR3 |= RCC_CFGR3_I2C1SW; //GPIOA-›AFR[0] |= (1‹‹(4*0)) |(1‹‹(4*1)); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_1);//3.5.1.4 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_1); GPIOB-›MODER &= ~(GPIO_MODER_MODER6 |GPIO_MODER_MODER7); GPIOB-›MODER |= (GPIO_MODER_MODER6_1 |GPIO_MODER_MODER7_1); GPIOB-›OTYPER |=(GPIO_OTYPER_OT_6 |GPIO_OTYPER_OT_7); I2C1-›TIMINGR = (uint32_t)0x00B01A4B;//0x00B01A4B; - 400 0x00700701 - 1.24 MHz I2C1-›CR1 = I2C_CR1_PE; }
|
Последний раз редактировалось miwutka; 05.10.2016 в 21:46.
|
|
|
|
05.10.2016, 21:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
GPIOB-›MODER &= ~(GPIO_MODER_MODER6 |GPIO_MODER_MODER7);
GPIOB-›MODER |= (GPIO_MODER_MODER6_1 |GPIO_MODER_MODER7_1);
GPIOB-›OTYPER |=(GPIO_OTYPER_OT_6 |GPIO_OTYPER_OT_7);
блин вместо GPIOB писал GPIOA - всё спешка.... всё работает...
|
|
|
|
05.10.2016, 22:25
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
miwutka, логический анализатор приобрел?
__________________
Осторожно , злой кот
|
|
|
|
06.10.2016, 00:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
пока только осциллограф. Завтра с таможни поеду забирать. Новая беда ))
Таймер 16, и 17 запустил как ШИМ каналы 1. Таймеры работают в отладке, IDR8, IDR9 изменяются, а на выходе ничего..... Так шим делал же уже много раз. Правда на 20-пиновой стм32ф030.
PHP код:
|
void InitTimer16(void)
{
//PORTB8 - OUT Test strelok
TIM_TimeBaseInitTypeDef TIM_Time_user;
TIM_OCInitTypeDef Hard_PWM_ini;
GPIO_InitTypeDef Pin;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16, ENABLE);// ???????? ???????????? ??????? 3
TIM_Time_user.TIM_Prescaler = 2600 - 1; //100 000 kHz///620
TIM_Time_user.TIM_CounterMode = TIM_CounterMode_Up;
TIM_Time_user.TIM_Period = 200; //?? ????? ?????? ??????? ? ????????????
TIM_Time_user.TIM_ClockDivision = TIM_CKD_DIV2;//26 MHz тактирование
TIM_TimeBaseInit(TIM16, &TIM_Time_user);
Hard_PWM_ini.TIM_OCMode = TIM_OCMode_PWM1;
Hard_PWM_ini.TIM_OutputState = TIM_OutputState_Enable;
//Hard_PWM_ini.TIM_OutputNState = ; This parameter is valid only for TIM1 and TIM8
Hard_PWM_ini.TIM_Pulse = 100;
Hard_PWM_ini.TIM_OCPolarity = TIM_OCPolarity_High;
//Hard_PWM_ini.TIM_OCNPolarity = ;This parameter is valid only for TIM1 and TIM8
//Hard_PWM_ini.TIM_OCIdleState = ;This parameter is valid only for TIM1 and TIM8
//Hard_PWM_ini.TIM_OCNIdleState = ;This parameter is valid only for TIM1 and TIM8
//NVIC_EnableIRQ(TIM3_IRQn); //????????? ????????? ?????????? ??????? 2
//TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
Pin.GPIO_Pin = GPIO_Pin_8;// OUT
Pin.GPIO_Mode = GPIO_Mode_AF;
Pin.GPIO_Speed = GPIO_Speed_50MHz;
Pin.GPIO_OType = GPIO_OType_PP;
Pin.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &Pin);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_0); //2,5.0
TIM_OC1Init(TIM16, &Hard_PWM_ini);//???????? ??????
TIM_Cmd(TIM16, ENABLE);//???????? ??????
}
|
Вроде всё правильно. Вот ток с альтернативной функцией не разобрался чтобы ее без SPL включать... Подскажите что может быть не так?
|
|
|
|
06.10.2016, 08:31
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Таймеры с 15 по 17 имеют, в дополнение, еще один, break and dead-time регистр BDTR, и в нем есть бит MOE, установка которого разрешит работу выхда ШИМ.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
06.10.2016, 09:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Забыл про него.....
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:23.
|
|