Jump to content
dem140592

Stm32 Запись Во Flash Зависает

Recommended Posts

пытаюсь записать данные во FLASH, зависает в момент присвоения, да так, что даже прерывания перестают работать, с мануалом всё сходится

if(FLASH->CR&FLASH_CR_LOCK)
{
FLASH->KEYR=FLASH_KEY1;
FLASH->KEYR=FLASH_KEY2;//проверял, разблокируется успешно
}
FLASH->CR|= FLASH_CR_PG;
*addr=(uint16_t)data;//вот здесь всё зависает
while(FLASH->SR&FLASH_SR_BSY);
FLASH->CR &= ~FLASH_CR_PG;
FLASH->CR |= FLASH_CR_LOCK;

использование стандартной функции заканчивается тем же

FLASH_Unlock();
FLASH_ProgramHalfWord(0x08004000, (uint16_t)0x1234);
FLASH_Lock();

помогите плиз разобраться sad.gif

Edited by admin

Share this post


Link to post
Share on other sites

Посмотри вот рабочий код, только что проверял, работает отлично. Пишет в 127 страничку 4 переменные:

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

///////////////////////////////////////////////////////
#define FLASH_KEY1               ((uint32_t)0x45670123)
#define FLASH_KEY2               ((uint32_t)0xCDEF89AB)
#define FLASH_PAGE				 ((uint8_t)0x7F)
///////////////////////////////////////////////////////

uint8_t flash_ready(void) {
return !(FLASH->SR & FLASH_SR_BSY);
}

/* Стираем страницу */
void flash_erase_page(uint32_t address) {
   FLASH->CR|= FLASH_CR_PER;
   FLASH->AR = address;
   FLASH->CR|= FLASH_CR_STRT;
   while(!flash_ready())
   	;
   FLASH->CR&= ~FLASH_CR_PER;
}

/* Разблокируем */
void flash_unlock(void) {
  FLASH->KEYR = FLASH_KEY1;
  FLASH->KEYR = FLASH_KEY2;
}

/* Блокировка Flash */
void flash_lock() {
FLASH->CR |= FLASH_CR_LOCK;
}

/* Запись во Flash */
void flash_write(uint32_t address,uint32_t data) {

FLASH->CR |= FLASH_CR_PG;
while(!flash_ready())
	;
   *(__IO uint16_t*)address = (uint16_t)data;
while(!flash_ready())
	;
address+=2;
data>>=16;
   *(__IO uint16_t*)address = (uint16_t)data;
while(!flash_ready())
	;
   FLASH->CR &= ~(FLASH_CR_PG);

}

/* Чтение Flash */
uint32_t flash_read(uint32_t address) {
return (*(__IO uint32_t*) address);
}

/* Функция записи 4-х байт данных */
void flash_write_variables(uint8_t var0, uint8_t var1, uint8_t var2, uint8_t var3){
uint32_t wr_data = var3<<24 | var2<<16 | var1<<8 | var0;
uint32_t st_address = FLASH_BASE + FLASH_PAGE * 1024;

flash_unlock();
flash_erase_page(st_address);
flash_lock();

flash_unlock();
uint16_t tmp;
for(tmp=0;tmp<1024;tmp+=4)
	flash_write(st_address+tmp,wr_data);
flash_lock();
}

int main(void) {

while (1)
{
	uint8_t v1,v2,v3,v4;

	flash_write_variables(1,2,3,4);

	uint32_t st_address = FLASH_BASE + FLASH_PAGE * 1024;
	v1=flash_read(st_address);
	v2=flash_read(st_address)>>8;
	v3=flash_read(st_address)>>16;
	v4=flash_read(st_address)>>24;
}
}

Share this post


Link to post
Share on other sites
Guest dezna

внутренний RC осцилятор HSI должен быть включен

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

Guest Alex

внутренний RC осцилятор HSI должен быть включен

И не только включен, так еще тактирование в результате должно быть 24 мГц или ниже

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...

  • Similar Content

    • By Стальной
      Здравствуйте!
      Интересует мнение коллег по правильному питанию мощных МК. Имеется STM32F722VCT6. Делаю для себя новый отладочный стенд. На нем будут обкатываться различные задачи, поставлю плюсом к МК всякую периферию, обязательно i2c память (из серии AT24Cxx), MAX3485, возможно какой-то дисплей, SD-карту, может быть SIM900 и NAND. Первичный источник - думаю, USB хватит.
      Вопрос - как организовать питание МК? Имеет ли смысл цифровую часть (а мб и часть периферийного зоопарка) питать импульсной системой, а аналоговую часть кренкой? Или всё кренкой запитать? Какие идеи?
      Спасибо)
      ЗЫ Сейчас использую стенд на STM32F407VET6, сделанный на коленках, все кренкой питается. Но там периферия изготавливается по мере необходимости и надевается отдельно на гребенки.
    • By befrikpa
      Добрый день товарищи!
      У меня такая проблема:
      Я хочу сделать штуку которая будет замыкать реле через определённое время(после подачи питания на него), реле времени так сказать. В принципе устройство работает, но у меня не получается сделать так, что бы светодиод (HL_4) мигал каждые пол секунды пока не включено реле, а после включения соответственно  светодиод горел постоянно.
      Сейчас у меня условие находится в бесконечном цикле, и при включении устройства, светодиод просто горит постоянно и всё.
      Скажу честно, я в программировании пока что зелёный, так что не судите строго за код))
      Прикрепил код:

       
    • By Alextiger62
      Отладочный набор на базе микроконтроллера STM32F746IGT6. Модульная конструкция и открытый дизайн делают плату идеальным решением для начала быстрой разработки устройств. В комплект поставки входят все необходимые модули расширения, для оценки всех возможностей микроконтроллера. 

      Комплектация: 
      1 х Материнская плата (Open746I-C development board); 
      1 х Процессорный модуль (Core746I); 
      1 х Кабель (USB type A plug to micro B plug cable);   - отсутствует
      1 х Кабель (USB type A receptacle to micro B plug cable);   - отсутствует
      1 х Соединительные провода (4-pin 2-pin wires pack);   - отсутствует 
      1 х Блок питания (Power adapter US standard 5V/1A);   - отсутствует
      1 х Дисплей (7inch Capacitive Touch LCD (F)); 
      1 х Плата (DP83848 Ethernet Board); 
      1 х Плата (USB3300 USB HS Board); 
      1 х Плата (UDA1380 Board); 
      1 х Плата (Micro SD Storage Board); 
      1 х Плата (OV2640 Camera Board); 
      1 х Плата (W25QXX DataFlash Board); 
      1 х Плата (10 DOF IMU Sensor (B)); 
      2 х Плата (SN65HVD230 CAN Board); 
      1 х Плата (Analog Test Board); 
      1 х Кабель (USB type A plug to mini-B plug cable);  - отсутствует
      1 х Кабель (USB type A receptacle to mini-B plug cable);   - отсутствует
      1 х Кабель (Ethernet Cable); 
      1 х Шлейф (40-pin FFC);  - отсутствует
      1 х Крепеж (7inch LCD screws pack).
    • By Денис216
      Не могу опросить магнитометр по I2C. На линиях какие-то сигналы проскакивают, но никакого результата не могу достичь. Кто-то что-то знает по этому поводу? Как заставить работать его.


       
      #include "stm32f30x.h"              int a1=0, j=0; int main(void) { RCC->AHBENR|=RCC_AHBENR_GPIOBEN;// тактирование портa B включено RCC->AHBENR|=RCC_AHBENR_GPIOEEN;//21 тактирование портa Е включено RCC->APB1ENR|=RCC_APB1ENR_I2C1EN;// тактирование I2C1 включено GPIOB->MODER|=0x0000A000; // альтернативная функция линий PB7,PB6 GPIOB->OTYPER|=(1<<6);  //настройка линии PB7 на выход открытый сток GPIOB->OTYPER|=(1<<7);  //настройка линии PB6 на выход открытый сток GPIOB->OSPEEDR=0xFFFFFFFF; GPIOB->AFR[0] |= 0x44000000;  //настройка линий PB7,PB6 на функцию AF4 GPIOE->MODER=0x55555555; //настройка порта Е на выход EXTI->EMR=1<<23; EXTI->IMR=1<<23; NVIC_EnableIRQ(I2C1_EV_IRQn); //инициализация I2C мастер I2C1->CR1=(0<<0); //PE=0 I2C1->TIMINGR=(0x4<<28);//PRESC[3:0]: Timing prescaler I2C1->TIMINGR=(0x8<<20);//SCLDEL[3:0]: Data setup time I2C1->TIMINGR=(0x8<<16);//SDADEL[3:0]: Data hold time I2C1->TIMINGR=(0xC3<<8);//SCLH[7:0]: SCL high period (master mode) I2C1->TIMINGR=(0xC7<<0);//SCLL[7:0]: SCL low period (master mode) I2C1->CR1=(0<<17);//для мастера = 0 NOSTRETCH: Clock stretching disable I2C1->CR1=(1<<6);//TCIE: Transfer Complete interrupt enable I2C1->CR1=(1<<2);//RXIE: RX Interrupt enable(RXNE) I2C1->CR1=(1<<1);//TXIE: TX Interrupt enable(TXIS) I2C1->CR2=(0<<11);//ADD10=0 -7 bits I2C1->CR2=(0<<10);//RD_WRN=0 передача I2C1->CR2=(1<<25);//AUTOEND I2C1->CR1|=(1<<0); //PE=1 I2C1->CR2 = 0x03<<1;//adress  I2C1->CR2|=1<<13;//start ?????? a1=I2C1->RXDR;     while (1){     //    I2C1->CR2|=1<<13;//start         if((a1&0x1)>0)    GPIOE->ODR =1<<9;         else            GPIOE->ODR =(0<<9);         if((a1 & 0x2)>0)    GPIOE->ODR |=1<<10;         else            GPIOE->ODR &= ~(1<<10);         if((a1 & 0x4)>0)    GPIOE->ODR |=1<<11;         else            GPIOE->ODR &= ~(1<<11);         if((a1 & 0x8)>0)    GPIOE->ODR |=1<<12;         else            GPIOE->ODR &= ~(1<<12);         if((a1 & 0x10)>0)    GPIOE->ODR |=1<<13;         else            GPIOE->ODR &= ~(1<<13);         if((a1 & 0x20)>0)    GPIOE->ODR |=1<<14;         else            GPIOE->ODR &= ~(1<<14);         if((a1 & 0x40)>0)    GPIOE->ODR |=1<<15;         else            GPIOE->ODR &= ~(1<<15);         if((a1 & 0x80)>0)    GPIOE->ODR |=1<<8;         else            GPIOE->ODR &= ~(1<<8); }} void I2C1_EV_EXTI23_IRQHandler () {a1=2;}  
    • By svd
      Предлагаю печатные платы для паяльной станции на STM32 и OLED дисплее 1,3" версии 2.1S
      Плата делалась под китайский алюминиевый корпус.
      Тема, где обсуждается данная станция T12 , опубликована на сайте radiokot.ru
      Фото платы


      Схема немного доработана:
      1) добавлены блокировочные конденсаторы 0,1 мкФ в цепях микроконтроллера;
      2) добавлен резистор в цепи буззера для возможности снижения громкости;
      3) есть возможность подключать жала JBC (для Т12 в разъеме паяльника запаивается перемычка)

      Большинство элементов типоразмера 0603. DC/DC преобразователь PSR-7805LF можно заменить на любой китайский аналог или микросхему 7805
      Ссылки на возможные замены:
      DC/DC аналог 7805 №1
      DC/DC аналог 7805 №2

      Во вложениях схема и расположение элементов на ПП, чертеж передней панели и прошивка под дисплей 1.3" с контроллером SH1106.

      Цена за одну плату 400 руб c учетом стоимости пересылки по РФ. Количество плат ограничено.
      По всем вопросам просьба обращаться в личку.
       
      STM32_T12_2.1S_SSH1106_1.3_v2_.pdf передняя панель.pdf T12_HW21S_Encryption-SH1106.zip
  • Сообщения

    • Полезная таблица диапазона частот эффективной работы конденсаторов.
    • Последняя попытка избавиться от хлама. BQ24040 2500+шт. За 10500р.
    • Спасибо,хорошо,что не заказал.Тогда 0,25 возьму.Она как раз 0,3 по лаку. А на вторички 0,71 возьму она по лаку 0,79.
    • Я собирал на макете простой ЛБП на TL431и кетайский набор. Сделал в железе  модернизированный ПиДБП и высоковольтный ЛБП по схеме Шелестова. Много времени потратил на улучшение сх. Шелестова и сейчас делаю низковольтный ЛБП по мотивам Шелестова. Из своего опыта и предрассудков могу своим оценочным суждением ранжировать эти схемы по качеству, функциональным возможностям, повторяемости, выбросам и пр.. 1. Самые сырые, кривые и не доработанные ЛБП - на TL431.  TL431 сама по себе склонна к возбудам. а в многокаскадных схемах с ней, охваченных ООС, возбуд гарантирован, на возможность у ЛБП на TL431, хоть какого нибудь запаса устойчивости, у меня нет никаких надежд. Схема на TL431, что я делал, железно была в возбуде при срабатывании канала ограничения тока. Автор посмотрел ее на ослике, и написал, что возбуд также при увеличении выходного тока. Сам автор 5 лет занимался эквилибристикой в симуляторе, без отладки в реале, и честно пишет, что некоторые варианты не рабочие, у некоторых проблемы с повторяемостью. Варианты на TL431 нуждаются в прополке заведомо нерабочих и кривых схем ЛБП, а если какая схема и покажется рабочей,  то ее нужно наладить и проверить, я не помню осциллограм в темах по проверке возбудов и устойчивости. Из гипотетических возможных плюсов для начинающих паяльщиков, у ЛБП на TL431, могло бы быть отсутствие ОУ и БП для них, но в схемах на TL431 стоит отдельная обмотка для питания TL431. Лично я бы не тратил время на TL431. 2. На 2 месте по неинтересности - схема из кетайского набора, впервые была опубликована в 1978г. Выходное напряжение ограничено напряжением питания ОУ. Схему с тех пор никто не измерял и не пытался наладить, все лепят номиналы 1978г. Недавно давал ссылку с аглицкого форума, там народ заметил у этой схемы выбросы 18V, и не очень успешно пытался бороться с этими выбросами. 3. Была схема ПиДБП симуляторного вида на 60V, у меня она называется 60В 6А_dbokov_.pdf. Из минусов у ПиДБП - наличие каскада с ОЭ, который снижает устойчивость и быстродействие ЛБП и отсутствие нормального питания ОУ по минусу, из-за чего нужно ставить тормозные ОУ с однополярным питанием. 4. Самые совершенные варианты ЛБП - сх. Шелестова и множество популярных ЛБП с названиями HY305... HY3010. ЛБП Арктика в данной теме тоже вариант HY3003. Масштабируется на любые вольты, хоть на 1000V. У Шелестова надо выкинуть эммитерные повторители, это сильно улучшит устойчивость, а у всяких схем типа HY30ХХ они уже выкинуты. При использовании приличных ОУ можно получить очень хорошие параметры. Последний мой вариант такого ЛБП, с прекрасной переходной характеристикой и отсутствием выбросов при вкл. и откл. ЛБП - https://forum.cxem.net/index.php?/topic/103115-модернизация-лбп-hy3010/&do=findComment&comment=3219538  Если делать ЛБП по максимуму, то нужно делать коммутатор обмоток и БП для ОУ, который исключит несинхронность подачи и снятия питания с ОУ. Такая несинхронность - основная причина выбросов при вкл. и откл. ЛБП. В моей схеме питания ОУ выбросы при вкл. не возможны, из-за задержки подачи +12V на ОУ, а выбросы при выкл. просто не успевают возникнуть, VT9 закрывает полевик за 10мс, это половина периода 50Гц. Лучшее время закрытия полевика из проектов в инете - 50мс. PS Тут народ недавно пытался улучшить ПиДБП, но результаты грустные https://www.eevblog.com/forum/beginners/lm324-power-supply-with-variable-voltage-and-current/725/  https://www.eevblog.com/forum/projects/linear-lab-power-supply/375/  
×
×
  • Create New...