Jump to content
IgnatiusF

Инициализация UART1, не работает

Recommended Posts

Не удается проинициализировать работу UART2 на скорость 19200 бод.

Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 

Кварц рабочий, и вообще все работает, при использовании библиотек HAL.

SysTick выключил потому, что были подозрения на конлфикт приоритетов.

Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.

Скрытый текст

#include "stm32f10x.h"					//HDE_VALUE = 20 MHz, defined STM32F10X_CL
										//defined USE_STDPERIPH_DRIVER
//==============INIT==============//
void HSE_ini() {
	RCC->CR |= RCC_HSE_ON;				//Внешний кварц 20 MHz
	//RCC->CFGR &= ~RCC_CFGR_SW_1;			//Переключение системы на тактирование от HSE
	//RCC->CFGR |= RCC_CFGR_SW_0;			//
	//if(SysTick_Config(20000000/1000)) {	//Инициализация SysTick
	//	while(1);}
}
void PORT_ini() {
	RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;		//Тактирование порта A - USART
	RCC->APB2ENR|=RCC_APB2ENR_IOPBEN;		//Тактирование порта B - сигнальные выходы
	GPIOB->CRL = 0x11110000;			//сигнальные выходы PB7 - PB4
}
void USART1_ini() {
	RCC->APB2ENR |= RCC_APB2ENR_USART1EN;	//Тактирование USART 1
	RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;	//Тактирование блока альт. функций
	USART1->BRR = 0x412;					//20MHz/16/19200 = 65,104
	USART1->CR1 = USART_CR1_UE|USART_CR1_TE|USART_CR1_RE|USART_CR1_RXNEIE; //Инициализация UART
	GPIOA->CRH |= 0x000004B0;				//RX(PA10) - Floating Input, TX(PA9) - Alternate Push-Pull 50MHz
	GPIOA->ODR |= GPIO_ODR_ODR9;			//TX на питание.
	NVIC_EnableIRQ(USART1_IRQn);			//Вкл. прерывание USART1
}
//============END_INIT============//

//==============VOID==============//
/*static __IO uint32_t delay_count = 0;
void SysTick_Handler(void) {
	if (delay_count > 0) {
		delay_count--;}}
void delay_ms(__IO uint32_t delay_temp) {
	delay_count = delay_temp;
	while(delay_count>1){}}*/
/*--------------------------------*/
void USART1_IRQHandler(void) {				//Прерывание USART1
	if (USART1->SR & USART_SR_RXNE) {		//Если RX не пуст
		USART1->DR = USART1->DR + 1;		//Эхо + 1
		GPIOB -> ODR |= GPIO_ODR_ODR6;		//Сигнал на выход PB6
	}
	GPIOB -> ODR |= GPIO_ODR_ODR5;			//Сигнал на выход PB5
}
void delay_for() {				//Задержка
    for (int u = 0; u < 650000; u++){}     	 //на for
}
//============END_VOID============//

//==============MAIN==============//
int main() { 
	HSE_ini();
	PORT_ini();
	USART1_ini();
	while (1) {
		GPIOB->ODR |= GPIO_ODR_ODR7;		//Мигалка
		delay_for();
		USART2->DR = 0b10000001;
		USART1->DR = 0b00011000;
		GPIOB->ODR &= ~GPIO_ODR_ODR7;		//Мигалка
		delay_for();
		USART2->DR = 0b00011000;
		USART1->DR = 0b10000001;
	}
}
//============END_MAIN============//

 

Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:

USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.

Где искать следует ошибку?

Share this post


Link to post
Share on other sites

А где в программе команда глобального разрешения прерываний: __enable_irq (); ?

Share this post


Link to post
Share on other sites

Насколько я знаю, это не обязательно, они же и так разрешены, не верно? SysTick тикает и без этого. В любом случае самое важное - бодрейт и тактирование, с ними реально что-то не так. По UART идет совсем не то, что нужно, точно не помехи и пр. т.к. это подключается вообще через MOXA по RS-485 и работает с HAL.
При включении битов SW в 01 (HSE SysCLK) UART вообще ничего кроме нулей не отправляет

Edited by IgnatiusF

Share this post


Link to post
Share on other sites

Время – деньги и наноамперы: применение часов реального времени Maxim Integrated

Зачем использовать внешнюю микросхему часов реального времени (RTC), а не внутренние RTC микроконтроллера? Хотя бы потому, что у RTC MAX31342 производства Maxim Integrated типовое потребление составляет 150 нА при 3 В и температуре 25°С, а у встроенных RTC одного из самых малопотребляющих микроконтроллеров при тех же условиях – примерно 370 нА.

Читать статью

Простите за откровенное вранье с моей стороны, быстро собирался перед написанием поста и кое-что подкорректировал. Запускаю я не USART1, а USART2, и для него не расписано прерывание, поэтому перед отправкой откорретировал вопрос. А так прерывание работает, оказывается.
Однако работа все равно идет странным образом. UART1, подключенный через USBtoTTL на клоке 20 МГц при посылке сплошных единиц результат такой: (E0 F0 F0 E0 E0 E0 F0 F0 F8 F8 E0 F0 E0 E0 F0 F0 F0). Возможно это помехи, идут одним двухжильным проводом. Однако всего-то 10 см с пайкой.
Через UART2, подключенный через MOXA по RS-485 (4w), при посылке сплошных единиц идет: (FE FE FE FE FE FE)

Share this post


Link to post
Share on other sites

С HAL'ом я не работаю, все просто можно настроить с помощью SPL (StdPeriphLibrary), если не хочется особо вникать в регистры. Настройка UART через SPL не сложна. Все настраивается через две функции:

void USART_Init(USART_TypeDef * USARTx, USART_InitTypeDef * USART_InitStruct) и

void USART_ITConfig(USART_TypeDef * USARTx, uint16_t USART_IT, FunctionalState NewState).

Требуемые значения, которые необходимо ввести в структуру подробно описаны в файле .chm.

1 час назад, IgnatiusF сказал:

Насколько я знаю, это не обязательно, они же и так разрешены, не верно?

С этой формулировкой я не уверен на 100%. Надо пробывать.

Share this post


Link to post
Share on other sites
                     

Чип-резисторы Panasonic - технология мягких выводов и сертификация AEC-Q200

Технология мягких выводов чип-резисторов производства компании Panasonic. Обзор серий с оптимизированными параметрами: прецизионных тонкопленочных, токоизмерительных, антисерных, резисторов с повышенной стойкостью к статике и импульсным нагрузкам, резисторных сборок.

Читать статью

1 час назад, yof сказал:

 

С HAL'ом я не работаю, все просто можно настроить с помощью SPL (StdPeriphLibrary)

 

Главный вопрос - зачем нужен SPL когда есть HAL? 

Человек же написал что на HAL все работает, но он хочет получить результат на цимисе.

Share this post


Link to post
Share on other sites
4 минуты назад, tar сказал:

но он хочет получить результат на цимисе

От SPL до CMSIS 1 шаг. Если отчетливо понимаешь API функции SPL, тогда напрямую писать в регистры не составит труда.

Share this post


Link to post
Share on other sites

Вот только вся проблема в том, что писать в регистры я вполне умею, но все равно что-то идет не так. Хотел посмотреть что HAL выставляет в BRR, однако, судя по дадашиту, чтение этого регистра запрещено. А очень жаль(
А вот в SPL я не заглядывал еще. Надеюсь, увижу там что ищу

Share this post


Link to post
Share on other sites
2 минуты назад, IgnatiusF сказал:

судя по дадашиту, чтение этого регистра запрещено

Почему запрещено? В даташите явно указано "rw" - чтение и запись.

 

01.jpg

Share this post


Link to post
Share on other sites

Ой, ахаха, простите, смотрю в книгу, вижу...:
image.png.a293b8f37b2d0e58c27f2e32d0adbfd3.png

Кстати, почему-то регистр RCC->CR у меня содержит все нули, проверяю вот так:
str[8] = RCC->CR>>24;
str[9] = RCC->CR>>16;
str[10] = RCC->CR>>8;
str[11] = RCC->CR;

HAL_UART_Transmit(&huart2,str,12,0xFFF);

Не может же такого быть, верно?

Share this post


Link to post
Share on other sites
8 минут назад, yof сказал:

От SPL до CMSIS 1 шаг

А от HAL до CMSIS сколько шагов? Приехали. HAL такой же абстрашн лейр что и SPL. Причем SPL как и HAL построены по одной идеологической архитектуре. Те же структуры, те же функции. Иногда при беглом взгляде даже не сразу заметишь что это SPL а не HAL. Или что по вашему HAL оперирует не регистрами а магическими шарами?

Share this post


Link to post
Share on other sites
10 минут назад, IgnatiusF сказал:

Кстати, почему-то регистр RCC->CR у меня содержит все нули, проверяю вот так:

А не проще под отладчиком  в точке останова посмотреть состояние этого регистра?

Share this post


Link to post
Share on other sites

#define  USART_APB1_BAUDRATE_CALC(xVal)  ((uint32_t) APB1_CLK / xVal)
#define  USART_APB2_BAUDRATE_CALC(xVal)  ((uint32_t) APB2_CLK / xVal)

USART1->BRR = USART_APB2_BAUDRATE_CALC(19200);

 

Share this post


Link to post
Share on other sites

STM32F107RCT6. Из "анализаторов" лишь терминал и светодиоды. Иного не дано. Тактирование стабильное, если про железо, проблема, возможно, в его конфигурации, ведь с HAL проблем нет.
Отладчик тоже нема - только:

Цитата

...терминал и светодиоды...

Бедненько, да.

А разве не надо еще на 16 делить? image.png.1a1e7e77c2fdde79dd009991adde5939.png

Share this post


Link to post
Share on other sites

Бодрейт HAL'ом ставится такой же. Попробую завтра на SPL запустить. Посмотрим, что выйдет.
RCC_CR все таки прочитался, значения тоже завтра проанализирую. А сейчас скопировал значение регистра с HAL в мой пример - фига. Однако, если кому понадобится, вот такие значения получились: 0x30035A83 или 0b0011.0000.0000.0011.0101.1010.1000.0011.

Share this post


Link to post
Share on other sites

Ну как купите себе анализатор за 5 баксов и J-Link будет попроще.

1 час назад, IgnatiusF сказал:

 

А разве не надо еще на 16 делить? image.png.1a1e7e77c2fdde79dd009991adde5939.png

Регистр BRR приводили выше

Share this post


Link to post
Share on other sites

Содрал временно состояния этих регистров:

RCC->CR = 0x30035A83;
USART2->CR1 = 0x0000200C;
RCC->CFGR = 0x04000005;

Работает.

Share this post


Link to post
Share on other sites

Ну вот и опять не работает:(

Прерывание приема работает очень странно. Если присылать данные - то прерывание не вылазит, а если сделать простое подключение через терминал, то есть нажать кнопочку "Connect", то прерывание срабатывает, и выплевывает в терминал 0. Помогите пожалуйста, столько нервов убил, а результат все тот же.

Пробовал RX настраивать на floating, pull-up и pull-down, все равно одно и тоже

Еще странность какая-то с MOXA uport 1150. Подключал по мануалу, TX+ к RX+, RX- к TX- и так далее, однако пришлось в итоге подключать с точностью до наоборот, TX к TX, минус к плюсу, и только тогда прием работает.

Share this post


Link to post
Share on other sites

Мозг мой из соломы, uPort 1150 еще и настраивается. А я, блин, все это время сидел с обычным rs-232 и воображал, что это rs-485 4w.

Share this post


Link to post
Share on other sites

Кварц какой? 20 Мгц F103 вроде не тянет, если я не ошибаюсь - максимальная частота 16.
При включении источника частоты необходимо проверять завелся ли он. Флаг - HSE_RDY
Только после этого можно переключать на HSE через SW.

Регистры это хорошо,  но для правильной инициализации нужно слово за словом читать документацию. Смотрите примеры. В лоб включить, как правильно, ничего просто так не удастся.

Обычно при настройки UART бывает либо в 2 раза больше, либо в 2 раза меньше. Пробуйте

Share this post


Link to post
Share on other sites

Да все работает уже, даже как надо, без глюков и прочих приколов.
Регистры вернул в прежнее состояние, то есть в то, которое сам выставлял. Байты идут в обе стороны, прерывания работают, тактирование тактирует исправно. 20 МГц, МК F107, а не 103.

То есть почти вся "неработа" заключалась в не настроенном переходнике MOXA usb - rs-485

Edited by IgnatiusF

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Ну и что? Ясен перец, что за столько лет параметры их только ухудшились. А сравнивать надо именно с своременными.   Вся проблема в том, что БП у У101 не умеет давать 15В. А дает больше 20В. 15В формировалось уже на плате блока тембра. Причем очень часто на платах не было стабилитронов и эти 20В шли сразу на УД1. В результате эти самые УД1 дохли. Решалась проблема установкой нормальных стабилизаторов на 15В. А резисторы нафиг выкинуть надо.   А греться он вообще не должен.   Осталось измерить ток потребления схемы и поставить нормальные стабилизаторы, не танцевать с бубном вокруг УНЧ!
    • Хотел было разместить видео в тему ЮМОР.,но ребята уболтали выложить сюда:  
    • на всех своих усилках и акустике всегда проверяю пулемет и выстрел, ну и барабаны. Выстрел должен звучать как выстрел, а не пук Alan Parsons&Stephen Court sound check 1993
    • Я использовал КТ368А и в УНЧ КТ 3102Е. Мне кажется, что они не хуже импортных.  За схему спасибо, интересно посмотреть.
    • Вот и я стал счастливым обладателем MOTU M4. И первым же делом возникла одна маленькая непонятка. Соединяю линейный вход с линейным выходом. Запускаю спектралаб, там стартую генератор сигнала, в настройках генератора выбираю уровень 0 дБ или 100%. Запускаю. На звуковой карте индикатор уровня линейного выхода показывает максимальную амплитуду, а вот индикатор линейного входа указывает приблизительно половину уровня. А когда старную спектральный анализ в спектралабе, то основная частота имеет уровень в -10дБ. Все настройки громкости, которые нашёл, выставил в 100%.  Собственно вопрос, нормально ли это, или где-то что-то не так, толи у меня с руками, толи со звуковухой ? По документации максимальный уровень линейного выхода +16dBu, а линейного входа +18dBu. Т.е. разница должна быть в 2 децибела, но никак не в 10.
    • Прочитал статью из файла который выложен на первой странице. Дак получается что ни каких высоковольтных выбросов на транзисторе в момент выключения там не должно быть. Ведь функция этой дополнительной обмотки двух диодов и конденсатора в том и заключается что бы зафиксировать напряжение на уровне примерно 2VCC. Но транзисторы у всех продолжают гореть. Причём часто безо всякой нагрузки. А про индукцию спросил потому что кто то советует использовать не более 0.3, а другие 0.35 вводят в программу. Походу все лепят тупо наугад повезёт не повезёт вот и всё. Кому то везёт у него работает. Кому то не везёт.А те кто знает как надо сделать хрен напишут. 
    • просто не понимают как работают данные конструкции Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь Не хочу никого обидеть, но прежде чем садиться писать прошивки сложнее моргания лампочки Сядте, прочитайте основы си и его конструкций. Вопросы снимутся сами собой В данном случае ткнули носом, а дальше ...........
  • Similar Content

    • By Timofey Shilov
      Пытаюсь разобраться в программировании этого контроллера и при попытке настроить USART для приема/передачи данных возникла проблема:
      Пытаюсь принять байт и после нажатия кнопки отправить его обратно, но на выходе получается совсем не то что ожидаю.

      При отправке 0 должно вернуть 0, но возвращает вот это. В чем может быть проблема?
      ASCII                                BIN                   DEC         HEX

      Подозрения падают на настройку baud rate, но вроде всё как в мануалах.

      Полный код:
      #include "stm32f4xx.h" #include "stm32f4xx_hal_gpio.h" #include "stm32f4xx_hal_rcc.h" #include "stm32f4xx_hal_cortex.h" #include "stdint.h" #include "math.h" //define Internal RC frequencies #define XTAL 16000000UL //define busses prescalers #define AHB_PRE 1 #define APB1_PRE 2 #define APB2_PRE 1 #define SysTicksClk 10000 //calculate peripheral frequencies #define SYSCLK 84000000 #define AHB SYSCLK/AHB_PRE #define APB1 AHB/APB1_PRE #define APB1_TIM APB1*2 #define APB2 AHB/APB2_PRE #define APB2_TIM APB2*1 #define SysTicks AHB/SysTicksClk #define USART_BAUDRATE 19200 #define BUF_LEN 1 struct Data { char Msg[BUF_LEN]; } Message; void USART2_IRQHandler(void) { if (!(USART2->SR & USART_SR_TXE)) { if (Message.Msg[0] == (char)0x00) GPIOA->ODR |= 1 << 1; if (Message.Msg[0] == (char)0x01) GPIOA->ODR |= 0 << 1; } if (USART2->SR & USART_SR_RXNE) { Message.Msg[0] = USART2->DR; } } int main() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN; GPIOA->MODER |= 1 << 1*2; //Set GPIOA pins output mode GPIOB->MODER |= 0 << 0*2; GPIOA->MODER |= 0xA0; GPIOA->AFR[0] |= 0x7700; RCC->APB1ENR |= RCC_APB1ENR_USART2EN; USART2->CR1 |= USART_CR1_UE; //usart enable USART2->CR1 |= USART_CR1_TE; //transmitter enable USART2->CR1 |= USART_CR1_RE; //receiver enable float div = (float)APB1 /(16*(float)USART_BAUDRATE); int integer = APB1 / (16*USART_BAUDRATE); float flo = (div - (float)integer)*16; int floatt = round(flo); USART2->BRR = (( integer << 4 ) + floatt); NVIC_EnableIRQ(USART2_IRQn); USART2->CR1 |= USART_CR1_TXEIE; USART2->CR1 |= USART_CR1_RXNEIE; int i; while(1) { if (!(GPIOB->IDR & GPIO_IDR_ID0)) { i = 1; } else { if(i == 1) { USART2->DR &= Message.Msg[0]; while(!(USART2->SR & USART_SR_TC)); i = 0; } } } }  
      Сама схема:

    • By Igor1
      Помогите разобраться, как совместить (X-NUCLEO-GNSS1A1 + Nucleo-STM32L053).
      На st.com  скачал СТАНДАРТНЫЙ пакет X-CUBE-GNSS1  для  Nucleo-STM32L073, отличие L053 & L053, в памяти, но при компиляции памяти хватает (с запасом).
      Вероятно необходимо пересобрать все исходники, как новый проект с  Микроконтроллером ..L053 взамен ..L073. 
      Немного освоил STM32CubeIDE.  Ничего не получается, очень мало знаний.
      Подскажите порядок действий ?
      1/- создаю новый проектSTM32CubeIDE (с Nucleo-STM32L053),
      2/- далее переписываю папки из стандартного проекта на МК Nucleo-STM32L073,
      3/-далее корректирую main.c ?....?   
      Или  (вместо нового проекта) импортировать стандартный проект МК Nucleo-STM32L073,  далее откорректировать на новый МК .. L053 ?  
      Спасибо. Игорь.
       
      P.S.
      1. Запускаем ГЛОНАСС-плату X-NUCLEO-GNSS1A1: пошаговая инструкция :  https://www.compel.ru/lib/126482
      2. Стандартный Проект X-CUBE-GNSS1:  https://www.st.com/en/embedded-software/x-cube-gnss1.html
      3. Есть софт mbed.com , для  Nucleo-STM32F401 :   https://os.mbed.com/users/etiene32/code/GNSS1A1_FINAL/     для Ардуино:   https://github.com/stm32duino/X-NUCLEO-GNSS1A1 в т.ч.
       
    • By Стальной
      Приветствую. Не получается запустить 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(); } }  
      Прошу помощи с этой проблемой. Спасибо.
    • By Стальной
      Доброго времени суток!
      Сделал отладочную (тестовую) плату с микроконтроллером STM32F722VCT6. Плата моя, целостность проверена, как топологии, так и пайки, мелкие дефекты были исправлены. Программирую через ST-Link на плате VLDiscovery. ST-Link Utility корректно распознает МК, читает и пишет память. При попытке прошить через IAR вылетает ошибка, что целевой камень не соответствует ожидаемому. Я пробовал написать мигалку и прошить двоичный файл через ST-Link Utility. Стирание, программирование и верификация проходят успешно, но мигание не наблюдается.
      Проблема с неверным определением МК уже была, но в тот раз причиной были разработчики IAR, баг в одной из версий, что они сами подтвердили и прислали патч. Однако в тот раз собранная прошивка работала, если ее зашить через утилиту.
      Помогите разобраться. Прикреплю проект платы, вдруг где ошибка. 
       

      bench.dch f7 bench.dip
×
×
  • Create New...