Перейти к содержанию

Стальной

Members
  • Постов

    3 986
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные Стальной

  1. Приветствую. Не получается запустить I2C на STM32F030F4P6 для общения с EEPROM. Использую StdPeriph. Сначала пробовал сам писать, потом взял код отсюда. Результат одинаков: На линиях активности нет, висит 3В. Через CubeMX все работает.

    Последний код, который я пробовал:

    
    void I2C_EEPROM_Init(void)
    {
    	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
    	GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;			// Режим альтернативной функции
    	GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10;				// Открытый коллектор
    	GPIOA->OSPEEDR |= 0xFF<<18;	// Максимальная скорость
    	// Выбор альтернативной функции
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,  GPIO_AF_1);	// I2C1_SCL
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);	// I2C1_SDA
    
    	I2C_InitTypeDef I2C_InitStruct;
    	I2C_InitStruct.I2C_Timing = 0x00402D42;
    	I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_Disable;
    	I2C_InitStruct.I2C_DigitalFilter = 0x00;
    	I2C_InitStruct.I2C_Mode = I2C_Mode_I2C ;
    	I2C_InitStruct.I2C_OwnAddress1 = 0xDD;
    	I2C_Init( I2C1, &I2C_InitStruct);
    	I2C_Cmd(I2C1, ENABLE);
    }
    
    
    int main()
    
    {
    	/*
    	 * ВКЛЮЧЕНИМЕ IWDG
    	 */
    	// включаем LSI
    	RCC_LSICmd(ENABLE);
    	while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
    	// разрешается доступ к регистрам IWDG
    	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    	// устанавливаем предделитель
    	IWDG_SetPrescaler(IWDG_Prescaler_256);
    	// значение для перезагрузки
    	IWDG_SetReload(0xEA);
    	// перезагрузим значение
    	IWDG_ReloadCounter();
    	// LSI должен быть включен
    	//IWDG_Enable();
    	/*
    	 * ВКЛЮЧЕНИМЕ IWDG ЗАВЕРШЕНО
    	 */
    
    
    	/*
    	 * Запуск ФАПЧ
    	 * Основная частота 48 МГц
    	 * UART от HSI
    	 */
    	RCC->CFGR |= 0xAA<<18; //pll mul = 12
    	RCC->CFGR |= 5<<8; //APB prescaller = 4
    	RCC->CFGR3 |= 3; //USART clock from HSI
    	RCC->CR |= RCC_CR_PLLON;
    	while ((RCC->CR | RCC_CR_PLLRDY) == 0);
    	RCC->CFGR |= 2; //PLL as SYSCLK
    	/*
    	 * Настройка ФАПЧ завершена
    	 */
    	//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    //	I2C_Initialization();
    
    	I2C_EEPROM_Init();
    
    	while (1)
    	{
    		I2C_TransferHandling(I2C1, 0xA0, 1, I2C_Reload_Mode, I2C_Generate_Start_Write);//devAddr
    		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TXE) == RESET);//TXDR empty
    		I2C_SendData(I2C1, 0);//memAddr
    		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TCR) == RESET);//transmition complete
    		I2C_TransferHandling(I2C1, 0xA0, 1, I2C_AutoEnd_Mode, I2C_No_StartStop);
    		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TXE) == RESET);
    		I2C_SendData(I2C1, 25);
    		while(I2C_GetFlagStatus(I2C1, I2C_ISR_STOPF) == RESET);
    		I2C_ClearFlag(I2C1, I2C_ICR_STOPCF);
    
    		for (long int i = 0; i < 30000; i++)
    			IWDG_ReloadCounter();
    	}
    }

     

    Прошу помощи с этой проблемой. Спасибо.

  2. Доброго времени суток!

    Сделал отладочную (тестовую) плату с микроконтроллером STM32F722VCT6. Плата моя, целостность проверена, как топологии, так и пайки, мелкие дефекты были исправлены. Программирую через ST-Link на плате VLDiscovery. ST-Link Utility корректно распознает МК, читает и пишет память. При попытке прошить через IAR вылетает ошибка, что целевой камень не соответствует ожидаемому. Я пробовал написать мигалку и прошить двоичный файл через ST-Link Utility. Стирание, программирование и верификация проходят успешно, но мигание не наблюдается.

    Проблема с неверным определением МК уже была, но в тот раз причиной были разработчики IAR, баг в одной из версий, что они сами подтвердили и прислали патч. Однако в тот раз собранная прошивка работала, если ее зашить через утилиту.

    Помогите разобраться. Прикреплю проект платы, вдруг где ошибка. 

     

    spacer.png

    bench.dch f7 bench.dip

  3. Здравствуйте!

    Интересует мнение коллег по правильному питанию мощных МК. Имеется STM32F722VCT6. Делаю для себя новый отладочный стенд. На нем будут обкатываться различные задачи, поставлю плюсом к МК всякую периферию, обязательно i2c память (из серии AT24Cxx), MAX3485, возможно какой-то дисплей, SD-карту, может быть SIM900 и NAND. Первичный источник - думаю, USB хватит.

    Вопрос - как организовать питание МК? Имеет ли смысл цифровую часть (а мб и часть периферийного зоопарка) питать импульсной системой, а аналоговую часть кренкой? Или всё кренкой запитать? Какие идеи?

    Спасибо)

    ЗЫ Сейчас использую стенд на STM32F407VET6, сделанный на коленках, все кренкой питается. Но там периферия изготавливается по мере необходимости и надевается отдельно на гребенки.

  4. 30.10.2019 в 04:28, Dr. West сказал:

    Пиктограмма означает, что датчик работает на отражение, т.е. содержит в себе и излучатель и приёмник

    А на C2G что? там две стрелочки в разные стороны

    @optima В цепь 24В попало 110В переменки. Много чего унесло

    @ART_ME Изготовитель станка неизвестен, полустёртые иероглифы есть. Производителя датчика не нашёл. И я думаю. мне удастся подружить лазерку и фотодиод без катастрофических последствий. 

  5. Всех приветствую!

    Имеется вот такой нерабочий датчик на станок. Датчик KONTEC KS-M2. Надо его заменить. Но мне не удалось найти такого нигде в сети, даже инфу про него.  Есть только KS-C2G, но описание на понятном языке отсутствует (есть кривой автоперевод).

    Исходный датчик освещал отражающую поверхность (типа тонкого уголкового отражателя на плёнке), и отражение шло обратно на него. Соответственно, он реагировал на препятствие между отражателем и собой. 

    Вопросы. KS-C2G подойдёт для замены KS-M2? (Под надписью KONTEC есть пиктограмма их функции, но для C2G я не могу понять, что она значит; мб расстояние измеряет).

    Есть ли аналоги?

    В теории и я и сам могу такой изготовить, подскажите, за что какой из выходов отвечает, их там два.

    Спасибо!

    IMG_20190923_132137.jpg

  6. @Pont 007  Те, у кого старинные компы с 98 виндой, не хотят перейти на другую, так как у них какая-то прога не работает под новыми осями и требует саундбластер (хз, что это). Мой знакомый компьютерщик сейчас занимается интимным процессом, оживляя эти ЭВМ. Я попробовал оживить одну мамку того времени, встаёт на пост-коде С1, феникс биос. Я даже такого кода для этого биоса не нашёл в современных справочниках! И вот только на таких ПК работает их прога.

×
×
  • Создать...