Уже не один вечер пітаюсь запустить стм32 с eeprom для сохранения данных .Контроллер гаснет в прямом смысле слова .когда выполняется комада (чтения eeprom)
Код:
Код:
/*
* main.c
*
* Created on: 12 авг. 2020 г.
* Author: Ivan
*/
#include"main.h"
#include<stdio.h>
#define button1 // GPIOA->IDR &GPIO_IDR_ID6
#define button2 // GPIOA->IDR &GPIO_IDR_ID7
//#include"#include"main.h"lcd2.h"
volatile unsigned int pauza=0;
volatile unsigned int pauza_1=0;
volatile unsigned char flag1=0;
volatile unsigned char flag=0;
volatile unsigned char flag2=0;
volatile unsigned int b,c;
volatile unsigned char b1,b2,c1,c2,t1,t2;
volatile unsigned int t,m;
volatile unsigned char menu=0;
volatile unsigned char menu_en=0;
volatile unsigned char menu_eep=0;
volatile unsigned int adc_data1=0;
volatile unsigned int adc_data2=0;
volatile unsigned int adc_data3=0;
volatile unsigned int adc_data4=0;
char bufer1[16]={};
char bufer2[16];
char bufer3[16];
uint16_t temp;
uint16_t ADC_Data[4];
//#define z 0xB1//Я
typedef unsigned char byte; //переопределяем тип
void delay_ms(int a)
{
int i = 0;
int f = 0;
while(f < a)
{
while(i<60)
{i++;}
f++;
}
}
uint8_t bii [8]=
{
0B00000,
0B00000,
0B01010,
0B00100,
0B00100,
0B00100,
0B00100,
0B00000
};
uint8_t bk [8]=
{
0B00000,
0B00000,
0B01001,
0B01010,
0B01100,
0B01010,
0B01001,
0B00000
};
uint8_t bj [8]=
{
0B00000,
0B00000,
0B10101,
0B01110,
0B00100,
0B01110,
0B10101,
0B00000
};
uint8_t bm[]=
{
0B00000,
0B00000,
0B10001,
0B11011,
0B10101,
0B10001,
0B10001,
0B00000
};
uint8_t bn[]=
{
0B00000,
0B00000,
0B10010,
0B10010,
0B11110,
0B10010,
0B10010,
0B00000
};
uint8_t biu[]=
{
0B00000,
0B00000,
0B10111,
0B10101,
0B11101,
0B10101,
0B10111,
0B00000
};
uint8_t iorp[]=
{
0b00000,
0b01100,
0b11110,
0b11110,
0b01111,
0b00111,
0b00011,
0b00001
};
uint8_t ior2p[]=
{
0b00000,
0b00110,
0b01111,
0b01110,
0b11110,
0b11100,
0b11000,
0b10000
};
void init_IWDGtimer(void)
{
RCC->CSR|= RCC_CSR_LSION;
IWDG->KR = 0x5555; // Access to registers
IWDG->PR&= ~(IWDG_PR_PR_0 | IWDG_PR_PR_1 | IWDG_PR_PR_2); // 4096
IWDG->RLR =250;//0x7FF;
while (!((IWDG->SR & IWDG_SR_PVU) && (IWDG->SR & IWDG_SR_RVU))){} // wait while bist of PVU and RVU will be set.
IWDG->KR = 0xCCCC; // Start count down;
}
void program1(void)
{
if(pauza==1)
{
lcd_clear();
lcd_set_xy(0, 0);
// IWDG->KR = 0xAAAA;
}
if(pauza==20)
{
//PORTC13_ON;
lcd_clear();
lcd_set_xy(0, 0);
lcd_send(2,DATA);
}
if(pauza==35)
{
// PORTC13_OF;
lcd_clear();
lcd_set_xy(0, 0);
lcd_send('a',DATA);
lcd_send(2,DATA);
// pauza=0;
}
if(pauza==50)
{
lcd_clear();
lcd_set_xy(0, 0);
// lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
}
if(pauza==65)
{
lcd_clear();
//lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_set_xy(0, 0);
lcd_send(0,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
//pauza=0;
}
if(pauza==80)
{
lcd_clear();
lcd_set_xy(0, 0);
lcd_send(' ' ,DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
//pauza=0;
}
if(pauza==95)
{
lcd_clear();
// lcd_set_xy(0, 0);
// lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_set_xy(0, 0);
lcd_send(' ',DATA);
lcd_send(' ',DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
lcd_set_xy(0, 1);
lcd_send(3,DATA);
lcd_send('e',DATA);
lcd_send(4,DATA);
lcd_send(5,DATA);
lcd_send(' ',DATA);
lcd_send( 3 ,DATA);
lcd_send('a',DATA);
lcd_send( 3 ,DATA);
lcd_send('a',DATA);
// lcd_out("mama");
// pauza=0;
}
// IWDG->KR = 0xAAAA;
}
void program2(void)
{
// TIM3->CNT=0;
// lcd_clear();
lcd_set_xy(0, 0);
lcd_send(' ',DATA);
lcd_send(' ',DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
lcd_send(' ',DATA);
lcd_send(3,DATA);
lcd_send('e',DATA);
lcd_send(4,DATA);
lcd_send(5,DATA);
lcd_set_xy(0, 1);
// lcd_send(' ',DATA);
// lcd_send('b',DATA);
// lcd_send('=',DATA);
// lcd_send(b/10+0x30,DATA);
//lcd_send(b%10+0x30,DATA);
//lcd_send(b%100+0x30,DATA);
// b1=b/256;
// b2=b%256;
//TIM3->CNT=b;
// t=0;
lcd_send(' ',DATA);
lcd_send(' ',DATA);
sprintf(bufer1,"b=%4d",b);
lcd_out(bufer1);
// lcd_send(' ',DATA);
// flag2=1;
b2=b/256;
b1=b%256;
// Delay(40);
// IWDG->KR = 0xAAAA;
// }
}
void program3(void)
{//
// lcd_clear();
lcd_set_xy(0, 0);
lcd_send(' ',DATA);
lcd_send(' ',DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
lcd_send(' ',DATA);
lcd_send(3,DATA);
lcd_send('e',DATA);
lcd_send(4,DATA);
lcd_send(5,DATA);
// t=700;
// t=TIM3->CNT;
lcd_set_xy(0,1);
//lcd_send(' ',DATA);
// lcd_send('t',DATA);
//lcd_send('=',DATA);
//lcd_send(t/10+0x30,DATA);
//lcd_send(t%10+0x30,DATA);
// lcd_send(t%100+0x30,DATA);
//t1=t/256;
// t2=t%256;
lcd_send(' ',DATA);
lcd_send(' ',DATA);
sprintf(bufer2,"t=%4d",t);
lcd_out(bufer2);
//IWDG->KR = 0xAAAA;
}
void program4(void)
{
// lcd_clear();
lcd_set_xy(0, 0);
lcd_send(' ',DATA);
lcd_send(' ',DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
lcd_send(' ',DATA);
lcd_send(3,DATA);
lcd_send('e',DATA);
lcd_send(4,DATA);
lcd_send(5,DATA);
// t=700;
// c=TIM3->CNT;
lcd_set_xy(0,1);
// lcd_send(' ',DATA);
//lcd_send('c',DATA);
// lcd_send('=',DATA);
//lcd_send(c/10+0x30,DATA);
// lcd_send(c%10+0x30,DATA);
// lcd_send(c%100+0x30,DATA);
// c1=c/256;
// c2=c%256;
// TIM3->CNT=c;
lcd_send(' ',DATA);
lcd_send(' ',DATA);
sprintf(bufer3,"c= %4d",c);
lcd_out(bufer3);
}
void Calbac (void)
{
ADC_Data[0]=ADC1->JDR1;
ADC_Data[1]=ADC1->JDR2;
ADC_Data[2]=ADC1->JDR3;
ADC_Data[3]=ADC1->JDR4;
//TIM4->CCR3=ADC_Data[2];
// TIM4->CCR3=ADC_Data[0];
//TIM4->CCR3=ADC_Data[2];
}
int main(void)
{
//I2C1_readByteByADDR1(1,0);
//char bufer1[16];
//lcd_delay();
//int b;
//init_IWDGtimer(); ./
AHB1ER_init();
i2c1_AF_init();
i2c1_init();
// lcd_clear();
I2C1_readByteByADDR1(0x02,b);
//I2C1_readByteByADDR1(0x11,b1);
PORT_init();
timer1_init();
timer2_init();
AFR_init_time3();
timer3_init();
AFR_init_time4();
time4_init();
time5_init();
timer6_init();
adc3_init_regular();
adc1_init_inject();
//lcd_init_GPIO();
// str_lcd("string");
//I2C1_readByteByADDR1(1,0);
//I2C1_readByteByADDR1(3,2);
//I2C1_readByteByADDR1(5,4);
// I2C1_readByteByADDR1(7,6);
//I2C1_readByteByADDR1(9,8);
//I2C1_readByteByADDR1(11,10);
// LCD_Clear();
ADC1->CR1|= ADC_CR1_JEOCIE;
ADC1->CR2 |= ADC_CR2_ADON;
NVIC_EnableIRQ ( ADC_IRQn);
ADC3->CR2|=ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_1;
ADC1->CR2|=ADC_CR2_JEXTSEL_1 |ADC_CR2_JEXTSEL_0;
//ADC1->CR2|=ADC_CR2_JSWSTART;
//LCD_init1();
lcd_init();
//();
//lcd_set_state(LCD_ENABLE, CURSOR_ENABLE, BLINK);
lcd_set_user_char(0, bii);
lcd_set_user_char(1, bj);
lcd_set_user_char(2, bk);
lcd_set_user_char(3, bm);
lcd_set_user_char(4, bn);
lcd_set_user_char(5, biu);
// Наша рыба это символ номер ноль
// lcd_out("This is fish"); //Выводим надпись в нулевую строку
// lcd_set_xy(0,1); //переводим курсор в первую строку
//lcd_send(0,DATA);
// lcd_send(1,DATA);
//lcd_send('a',DATA);
//Выводим символ номер ноль
// lcd_set_state(LCD_ENABLE, CURSOR_ENABLE, BLINK);
//lcd_set_state(LCD_ENABLE,CURSOR_ENABLE,NO_BLINK);
//lcd_clear();
//lcd_set_state(LCD_ENABLE,CURSOR_ENABLE,NO_BLINK);
//InitialLCD();
//ClearLCD();
//Cursor(0,2);
//lcd_out("mama");
//PrintStr("MAMA");
//lcd_set_xy(0, 1);
//lcd_out("mama");
//lcd_set_xy(6, 6);
//lcd_out("papa");
//lcd_send('X',DATA);
// lcd_send('y',DATA);
//lcd_send('e',DATA);
// clearlcd();
// str_lcd("string");
// delay_ms(50);
init_IWDGtimer();
b=((unsigned int) b1<<8)|b2;
c=((unsigned int )c1<<8)|c2;
t=((unsigned int) t1<<8)|t2;
while(1)
{
if(menu==0)
{
program1();
}
if(menu==1)
{
program2();
Delay(50);
}
if(menu==2)
{
program3();
Delay(50);
}
if(menu==3)
{
program4();
Delay(50);
}
if(menu==4)
{
menu=0;
}
}
}
Код:
#include"main.h"
#define I2C_REQUEST_WRITE 0x00//0
#define I2C_REQUEST_READ 0x01
#define EEPROM_ADDRESS 0b1010000
#define I2C_OWNADDRESS1_7BIT 0x00004000U
void i2c1_AF_init(void)
{
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_0;
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_1;
GPIOB->AFR[0]|=GPIO_AFRL_AFSEL7_2 ;
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_3;
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_0;
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_1;
GPIOB->AFR[0]|=GPIO_AFRL_AFSEL6_2;
GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_3;
}
void i2c1_init(void)
{
GPIOB->MODER|=GPIO_MODER_MODE7_1;
GPIOB->MODER&=~GPIO_MODER_MODE7_0;
GPIOB->OTYPER|=GPIO_OTYPER_OT7;
GPIOB->MODER|=GPIO_MODER_MODE6_1;
GPIOB->MODER&=~GPIO_MODER_MODE6_0;
GPIOB->OTYPER|=GPIO_OTYPER_OT6;
RCC->APB1ENR|=RCC_APB1ENR_I2C1EN;
I2C1->CR2&=~I2C_CR2_FREQ_2 ;
I2C1->TRISE=9;
I2C1->CCR&=~I2C_CCR_FS;
//I2C1->OAR1|=I2C_OAR1_ADD0 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD8_9 | I2C_OAR1_ADDMODE;
I2C1->OAR1|= I2C_OWNADDRESS1_7BIT;
//I2C1->CR1|=I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP;
I2C1->CR1|=I2C_CR1_ACK;
I2C1->OAR2|=I2C_OAR2_ADD2;
I2C1->CR1|=I2C_CR1_PE;
}
void I2C1_SendByteByADDR1(uint16_t adres,uint8_t data)
{
//uint8_t data2;
I2C1->CR1|=I2C_CR1_ACK;
I2C1->CR1|=I2C_CR1_START;
while(!(I2C1->SR1&I2C_SR1_SB))
{
}
(void) I2C1->SR1;
I2C1->DR|= EEPROM_ADDRESS |I2C_REQUEST_WRITE;
//I2C1->DR|= addr | I2C_REQUEST_WRITE;//
while (!(I2C1->SR1& I2C_SR1_ADDR))
{
}
(void) I2C1->SR1;
(void) I2C1->SR2;
I2C1->DR|=(uint8_t)adres;//
while (!(I2C1->SR1& I2C_SR1_TXE))
{
}
I2C1->DR|=(uint8_t) (adres>>8) ;//
while (!(I2C1->SR1 & I2C_SR1_TXE))
{
}
I2C1->DR|=data;
while (!(I2C1->SR1 & I2C_SR1_BTF))
{
}
I2C1->CR1|=I2C_CR1_STOP;
}
void I2C1_readByteByADDR1(uint16_t adres,uint8_t data)
{
//uint8_t data2;
//uint8_t data1;
I2C1->CR1|=I2C_CR1_ACK;
I2C1->CR1|= I2C_CR1_START;
while (!(I2C1->SR1& I2C_SR1_SB)){}
(void) I2C1->SR1;
I2C1->DR|= EEPROM_ADDRESS |I2C_REQUEST_WRITE;
// I2C1->DR|= SLAVE_OWN_ADDRESS | I2C_REQUEST_WRITE;
while (!(I2C1->SR1& I2C_SR1_ADDR)){}
(void) I2C1->SR1;
(void) I2C1->SR2;
//Transmit Address begin EEPROM
I2C1->DR|= (uint8_t) adres;
while (!(I2C1->SR1& I2C_SR1_TXE)){}
I2C1->DR|=(uint8_t) (adres>>8);
while (!(I2C1->SR1& I2C_SR1_TXE)){}
I2C1->CR1 |= I2C_CR1_START;
while (!(I2C1->SR1 & I2C_SR1_SB)){}
(void) I2C1->SR1;
I2C1->DR = EEPROM_ADDRESS|I2C_REQUEST_READ;
while (!(I2C1->SR1 & I2C_SR1_ADDR)){}
(void) I2C1->SR1;
(void) I2C1->SR2;
I2C1->CR1 &= ~I2C_CR1_ACK;
while (!(I2C1->SR1 & I2C_SR1_RXNE)){}
data= I2C1->DR;
// while (!(I2C1->SR1 & I2C_SR1_RXNE)){}
//data2 =I2C1->DR;
I2C1->CR1 |= I2C_CR1_STOP;
// return data;
// Delay(5);
}
void i2c2_AF_init(void)
{
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_0;
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_1;
GPIOB->AFR[1]|=GPIO_AFRH_AFSEL10_2 ;
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_3;
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_0;
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_1;
GPIOB->AFR[1]|=GPIO_AFRH_AFSEL11_2;
GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_3;
}
void i2c2_init(void)
{
GPIOB->MODER|=GPIO_MODER_MODE10_1;
GPIOB->MODER&=~GPIO_MODER_MODE10_0;
GPIOB->OTYPER|=GPIO_OTYPER_OT10;
GPIOB->MODER|=GPIO_MODER_MODE11_1;
GPIOB->MODER&=~GPIO_MODER_MODE11_0;
GPIOB->OTYPER|=GPIO_OTYPER_OT11;
//RCC->APB1ENR|=RCC_APB1ENR_I2C2EN;
}