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

stm32 защитный бит.

Решил я защитить свою прошивку. И установил бит защиты. И бац lcd перестало работать при установки этого бита. В чём загвоздка?Кто из спецов подскажет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, dimir сказал:

Ау спецы вы где?В плен попали?

Все телепаты в перманентном отпуске. А с вашим уровнем детализации описания проблем нужны именно телепаты...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я попробывал другой вариант.Сначала прошил.Потом установил optima byte.И получилось.Почему.Так что в коде может быть не так что то вы темните.

Спойлер
/*
 * main.c
 *
 *  Created on: 24 трав. 2022 р.
 *      Author: Admin
 */

#include "main.h"
#include<stdio.h>
#define SYSCLOCK 72000000U
__IO uint32_t tmpreg;
__IO uint32_t SysTick_CNT = 0;
//volatile uint16_t adc_data=0;
uint16_t  txData[255];
__IO uint8_t fl_adc;
volatile uint16_t adc_data[4]={0};
 volatile   unsigned char sec,min,hour,day,date,month,year;
volatile   unsigned char menu_btn;
volatile unsigned	char  menu_lcd;
char  buf0[20];
char buf1[20];
char buf2[20];
char buf3[20];
char buf4[20];
char buf5[20];
char buf6[20];
char buf7[20];
char buf8[20];
char buf9[50];
char buf10[50];
	volatile  unsigned char flag=0;
	volatile  unsigned char flag1=0;
	volatile unsigned  int	 pauza=0;
	volatile unsigned  int	 pauza1=0;
	volatile  unsigned char flag2=0;
		   	volatile  unsigned char flag3=0;
		   	volatile unsigned  int	 pauza2=0;
		   	volatile unsigned  int	 pauza3=0;
		    volatile unsigned char a1;
		 			volatile unsigned char a2;
		 			volatile unsigned char b1;
		 			volatile unsigned char b2;
		 			volatile unsigned char c1;
		 			volatile unsigned char c2;
		 			volatile unsigned char d1;
		 			volatile unsigned char d2;
		 			volatile unsigned  int a;
		 			volatile unsigned  int b;
		 			volatile unsigned  int c;
		 			volatile unsigned   int d;
		 			 unsigned  int result_a;
		 			 unsigned  int result_b;
		 			  unsigned  int result_c;
		 			  unsigned  int result_d;
struct
{
            volatile unsigned char a1;
			volatile unsigned char a2;
			volatile unsigned char b1;
			volatile unsigned char b2;
			volatile unsigned char c1;
			volatile unsigned char c2;
			volatile unsigned char d1;
			volatile unsigned char d2;
			unsigned short int a;
			 unsigned short  int b;
			 unsigned short int c;
			 unsigned  short int d;
			 unsigned  int result_a;
			 unsigned  int result_b;
			  unsigned  int result_c;
			  unsigned  int result_d;
			  volatile unsigned char MA[10];
}danie;
struct
{
	   // volatile   unsigned char menu_btn;
	  //volatile unsigned	char  menu_lcd;
	  char buf0[50];
	   char buf1[50];
	   char buf2[50];
	   char buf3[50];
	   char buf4[50];
	   char buf5[50];
	   	   char buf6[50];
	   	   char buf7[50];
	   	   char buf8[50];
	   	 char buf9[50];
	   	 char buf10[50];
	   	 char buf11[50];
	   	 char buf12[50];
	   	volatile  unsigned char flag;
	   	volatile  unsigned char flag1;
	   	volatile unsigned  int	 pauza0;
	   	volatile unsigned  int	 pauza1;
	   	volatile unsigned  int	 pauza2;
	   	volatile unsigned  int	 pauza3;
	   	volatile  unsigned char flag2;
	   		   	volatile  unsigned char flag3;
	   		 volatile  unsigned char flag4;
	   		 volatile  unsigned char flag5;
	   		 volatile  unsigned char flag6;
	   		 volatile  unsigned char flag7;
	   		 volatile  unsigned char flag8;

	   		 volatile unsigned char flag_eeprom_error;

	   		 volatile unsigned char flag_z;
	   		volatile unsigned char flag_obriv_a;
	   		volatile unsigned char flag_obriv_b;
	   		volatile unsigned char flag_obriv_c;
	   		volatile unsigned char bit_obriv_a;
	   		volatile unsigned char bit_obriv_b;
	   		volatile unsigned char bit_obriv_c;
	   	     volatile unsigned  char flag_port_peregruz;
	   		volatile unsigned char bit_status_A;
	   		volatile unsigned char bit_status_B;
	   		volatile unsigned char bit_status_C;
	   		volatile unsigned char bit_status_D;
}nastroyki;
struct
{
	volatile unsigned int pauza1;
} timer,*Timer;
struct
{
	volatile unsigned int pauza1_A;
	volatile unsigned int pauza1_B;
	volatile unsigned int pauza1_C;
	volatile unsigned int pauza1_D;
}timers;

void DMA1_Channel1_IRQHandler (void)
{
 if(DMA1->ISR & DMA_ISR_TCIF1)
 {
	 DMA1->IFCR|= DMA_IFCR_CTCIF1;

 }
 if(DMA1->ISR& DMA_ISR_TEIF1)
  {
	 DMA1->IFCR|= DMA_IFCR_CTEIF1;

  }
}
void DMA1_Channe4_IRQHandler (void)
{
 if(DMA1->ISR& DMA_ISR_TCIF4)
 {
	 DMA1->IFCR|= DMA_IFCR_CTCIF4;



 }
 if(DMA1->ISR& DMA_ISR_TEIF4)
  {
	 DMA1->IFCR|= DMA_IFCR_CTEIF4;
  }
}
void TIM1_UP_IRQHandler(void)
{

 if(TIM1->SR & TIM_SR_UIF)
 {
	TIM1->SR &= ~ TIM_SR_UIF;

	pauza++;
	      if((GPIOB->IDR&GPIO_IDR_IDR1)==0)
			{
			  GPIOA->BSRR|=GPIO_BSRR_BR15;
			}
			else
			{
			  GPIOA->BSRR|=GPIO_BSRR_BS15;
			}
	   if((GPIOB->IDR&GPIO_IDR_IDR0)==0)
	  {
	    GPIOA-> BSRR |=GPIO_BSRR_BR6;
		pauza=0;

	  }
	   else
	 {


	   if(pauza>700)
	  {
		GPIOA-> BSRR |=GPIO_BSRR_BS6;

	   }

		if(pauza>710)
		{
		 GPIOA-> BSRR |=GPIO_BSRR_BR6;

		}
	 }

            switch(menu_btn)
			{
              case 0:
               break;
              case 1:
                break;

              case 2:
                break;
              case 3:


				                   if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
				  	  		        {


				  	            	   if(pauza>2)
				  	            	  {
				  	                    pauza=0;

				  	  		      		if (a>=4095)
				  	  		      		{
				  	  		      	    	 a=0;
				  	  		      		}
				  	  		      	     a++;
				  	            	  }

				  	  		        }

				  	  		       if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
				  	  		       {
				  	  		        	//__disable_irq ();
				                       if(pauza>2)
				                      {
				  	  			       pauza=0;

				  	  		            if (a<=0)
				  	  		            {
				  	  		              a=4095;
				  	  		            }
				  	  		             a--;
				                      }
				  	  		      }

			    break;
                 case 4:


			  		                 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
			  		  	  		        {


			  		  	            	   if(pauza>2)
			  		  	            	  {
			  		  	                    pauza=0;

			  		  	  		      		if (b>=4095)
			  		  	  		      		{
			  		  	  		      	     b=0;
			  		  	  		      		}
			  		  	  		             b++;
			  		  	            	 }

			  		  	  		        }

			  		  	  		       if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
			  		  	  		       {
			  		  	  		        	//__disable_irq ();
			  		                       if(pauza>2)
			  		                      {
			  		  	  			       pauza=0;

			  		  	  		            if (b<=0)
			  		  	  		            {
			  		  	  		              b=4095;
			  		  	  		            }
			  		  	  		              b--;
			  		                      }
			  		  	  		       }


			         break;
                     case 5:

			  		                 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
			  		  	  		        {


			  		  	            	   if(pauza>2)
			  		  	            	  {
			  		  	                    pauza=0;

			  		  	  		      		if (c>=4095)
			  		  	  		      		{
			  		  	  		      	      c=0;
			  		  	  		      		}
			  		  	  		            c++;
			  		  	            	   }

			  		  	  		        }

			  		  	  		       if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
			  		  	  		       {
			  		  	  		        	//__disable_irq ();
			  		                       if(pauza>2)
			  		                      {
			  		  	  			       pauza=0;

			  		  	  		            if (c<=0)
			  		  	  		            {
			  		  	  		              c=4095;
			  		  	  		            }
			  		  	  		              c--;
			  		                      }
			  		  	  		      }

			  break;
			  	 case 6:

			  		                 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
			  		  	  		      {


			  		  	            	   if(pauza>2)
			  		  	            	  {
			  		  	                    pauza=0;

			  		  	  		      		if (d>=4095)
			  		  	  		      		{
			  		  	  		      	       d=0;
			  		  	  		      		}
			  		  	  		              d++;
			  		  	            	  }

			  		  	  		        }

			  		  	  		       if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
			  		  	  		       {
			  		  	  		        	//__disable_irq ();
			  		                       if(pauza>2)
			  		                      {
			  		  	  			        pauza=0;

			  		  	  		            if (d<=0)
			  		  	  		            {
			  		  	  		              d=4095;
			  		  	  		            }
			  		  	  		             d--;
			  		                      }
			  		  	  		      }

			  break;
			  case 7:
			    	if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
			    	{
                      if(pauza>2)
			          {
			             pauza=0;

			    	     if(day>=7)
			    		 {
			    	    		day=0;
			    		  }
			    		   day++;
			    		}

			    	 }

	              if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
			      {

			         if(pauza>2)
			         {
			        	 pauza=0;

			    	    if (day<=0)
			    	    {
			    	    	  day=7;
			             }
			    	    day--;
			          }
			        }

	            break;
			  case 8:
				    	 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
				    	 {
	                    	if(pauza>2)
				           {
				             pauza=0;

				    	     	if (year>=99)
				    	     	{
				    		    	year=0;
				    		    }
				    	     	 year++;
				    		}

				    	 }

		                 if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
				         {

				            if(pauza>2)
				            {
				            	 pauza=0;

				         	  if (year<=0)
				         	  {
				         		  year=99;
				              }
				         	  year--;
				             }
				         }

				    break;
				   case 9:

					    	 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
					    	 {
		                    	if(pauza>2)
					           {
					               pauza=0;

					    	     	if(month>=12)
					    	    	{
					    		    	month=0;
					    	     	}
					    	     	  month++;
					    		}

					    	  }

			                   if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
					          {

					              if(pauza>2)
					             {
					         	   pauza=0;

					    	       if (month<=0)
					    	       {
					    	     	  month=12;
					                }
					    	        month--;
					              }
					            }

			          break;
			          case 10:
					    	 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
					    	 {
		                    	if(pauza>2)
					           {
					             pauza=0;

					    	      if(date>=31)
					    		  {
					    		    	date=0;
					    		   }
					    		    date++;
					    		 }

					    	    }

			                    if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
					           {

					              if(pauza>2)
					              {
					             	 pauza=0;

					    	        if (date<=0)
					    	        {
					    	     	  date=31;
					                 }
					    	           date--;
					               }
					             }
			          break;
			          case 11:
	                   	 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
					    	 {
		                    	if(pauza>2)
					           {
					             pauza=0;

					    		  if (hour>=23)
					    		  {
					    			hour=0;
					    		  }
					    		  hour++;
					    		}

					    	 }

			                 if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
					        {

					           if(pauza>2)
					          {
					        	 pauza=0;

					    	       if (hour<=0)
					    	      {
					    		    hour=23;
					              }
					    	       hour--;
					             }
					         }
			           break;
			           case 12:

	                  	 if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
					    	 {
		                    	if(pauza>2)
					           {
					             pauza=0;

					    		if (min>=59)
					    		{
					    			min=0;
					    		}
					    		  min++;
					    	  }

					    	 }

			                if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
					       {

					          if(pauza>2)
					          {
					         	 pauza=0;

					    	      if (min<=0)
					        	  {
					    		    min=59;
					              }
					    	      min--;
					            }
					        }
			            break;
			            case 13:
	                 		 menu_btn=0;

	                 	break;

                    }

 }

}
void TIM2_IRQHandler (void)
{
	if(TIM2->SR & TIM_SR_UIF)
	{
		TIM2->SR &= ~ TIM_SR_UIF;

             if((GPIOB->IDR&GPIO_IDR_IDR5)==0)
			  {
            	      nastroyki.flag1=1;

			  			nastroyki.flag=1;
			  			nastroyki.pauza1++;
			  			pauza1=0;
			  	}


     if((nastroyki.flag==1)&&(GPIOB->IDR&GPIO_IDR_IDR5)&&(nastroyki.pauza1>10)&&(nastroyki.pauza1<100))
     {
       nastroyki.flag=0;
        nastroyki.flag1=0;
       nastroyki.pauza1=0;
       //nastroyki.pauza=0;
       menu_lcd++;
      menu_btn++;

     }
     if((nastroyki.flag==1)&&(GPIOB->IDR&GPIO_IDR_IDR5)&&(nastroyki.pauza1>100))
       {
    	          nastroyki.flag=0;
    	         nastroyki.flag1=0;
    	         nastroyki.pauza1=0;
    	         menu_lcd=0;
    	             menu_btn=0;
       }

	}


}
void TIM3_IRQHandler (void)
{
	if(TIM3->SR & TIM_SR_UIF)
	{
		TIM3->SR &= ~ TIM_SR_UIF;
		 pauza1++;


	}
}

void TIM4_IRQHandler (void)
{
	if(TIM4->SR & TIM_SR_UIF)
	{
		TIM4->SR &= ~ TIM_SR_UIF;
		if(nastroyki.flag_obriv_a==1)
		{
			timers.pauza1_A++;
		}
		if(nastroyki.flag_obriv_b==1)
		{
			timers.pauza1_B++;
		}
		if(nastroyki.flag_obriv_c==1)
		{
			timers.pauza1_C++;
		}
		if(nastroyki.flag_port_peregruz==1)
		{
					timers.pauza1_D++;
		}
	}
}


void program_finich_peregruz(void)
{
  if(timers.pauza1_D>599)
  {
	  LCD_SetPos(0,1);
	   LCD_String("error_pr");


	  GPIOA-> BSRR |=GPIO_BSRR_BR5;
  }
      if(timers.pauza1_D>601)
      {
    	  pauza=0;

      }
}
void program_finich_obriv_a(void)
{
  if(timers.pauza1_A>149)
  {
	  LCD_SetPos(0,1);
	 LCD_String("error_o_A");
  }
  if(timers.pauza1_A>150)
  {
	 GPIOB-> BSRR |=GPIO_BSRR_BR11;
  }
   if(timers.pauza1_A>501)
    {
	   pauza=0;

    }
}
void program_finich_obriv_b(void)
{
  if(timers.pauza1_B>149)
  {
	  LCD_SetPos(0,1);
	 LCD_String("error_o_B");
  }
  if(timers.pauza1_B>150)
  {
	  GPIOB-> BSRR |=GPIO_BSRR_BR10;
  }
  if(timers.pauza1_B>501)
    {
	  pauza=0;

      }
}
void program_finich_obriv_c(void)
{
  if(timers.pauza1_C>149)
  {
	  LCD_SetPos(0,1);
	 LCD_String("error_o_C");
  }
   if(timers.pauza1_C>150)
  {
	   GPIOA-> BSRR |=GPIO_BSRR_BR7;
  }

  if(timers.pauza1_C>501)
  {
	  pauza=0;

   }
}
/*

*/
void SysTick_Handler(void)
{
  if(SysTick_CNT > 0)  SysTick_CNT--;
}
void init_systimer(void)
{
	 MODIFY_REG(SysTick->LOAD,SysTick_LOAD_RELOAD_Msk,SYSCLOCK / 1000 - 1);


  CLEAR_BIT(SysTick->VAL, SysTick_VAL_CURRENT_Msk);
    SET_BIT(SysTick->CTRL, SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);

}
void delay(__IO uint32_t tck)
{
  while(tck)
  {
    tck--;
  }
}
//----------------------------------------------------------
void delay_ms(__IO uint32_t ms)
{
  MODIFY_REG(SysTick->VAL,SysTick_VAL_CURRENT_Msk,SYSCLOCK / 1000 - 1);
  SysTick_CNT = ms;
  while(SysTick_CNT) {}
}
 void DelayMicro(__IO uint32_t micros)
{
	micros *=(SystemCoreClock / 1000000) / 9;
	while (micros--);
}
 void NMI_Handler(void)
 {
   if((RCC->CIR & RCC_CIR_CSSF) != 0) // HSE fail
   {
     RCC->CIR |= RCC_CIR_CSSC; // Clear CSSF flag

   }
 }
 void RCC_init(void)
 {
 	FLASH->ACR |=FLASH_ACR_PRFTBE ;
 	FLASH->ACR|=FLASH_ACR_LATENCY_2;

 	RCC->CR  |=RCC_CR_HSEON ;

 	while(!(RCC->CR&RCC_CR_HSERDY ))
 	{

 	}
     RCC->CR |=RCC_CR_CSSON ;
     RCC->CFGR|=RCC_CFGR_PLLSRC;
     RCC->CFGR|=RCC_CFGR_PLLXTPRE_HSE;

      RCC->CFGR|=RCC_CFGR_PLLMULL9;
      RCC->CFGR|=RCC_CFGR_HPRE_DIV1; //_VAL2FLD(RCC_CFGR_HPRE,1);
           RCC->CFGR|=RCC_CFGR_PPRE1_DIV2 ;//_VAL2FLD(RCC_CFGR_PPRE1,2);
           RCC->CFGR|=RCC_CFGR_PPRE2_DIV1; //_VAL2FLD(RCC_CFGR_PPRE2,1);
           RCC->CFGR|= RCC_CFGR_ADCPRE_DIV2;
      RCC->CR|=RCC_CR_PLLON;
      while(!(RCC->CR&RCC_CR_PLLRDY))
      {

      }

        RCC->CFGR|=RCC_CFGR_SW_PLL;
        while(!(RCC->CFGR&RCC_CFGR_SWS_PLL ))
        {

        }
 }
 void WWDT_init(void)
 {
	 RCC->APB1ENR =RCC_APB1ENR_WWDGEN;
	 WWDG->CFR|=_VAL2FLD(WWDG_CFR_WDGTB,0);

	 WWDG->CFR|=WWDG_CFR_EWI;

 }
 void IWDT_init(void)
 {
 	          RCC->CSR|= RCC_CSR_LSION;
 	         //while(!(RCC->CSR &RCC_CSR_LSIRDY ));
              IWDG->KR =0x5555;
              IWDG->PR|= _VAL2FLD(IWDG_PR_PR,0);
 		 //  IWDG->PR &=~(IWDG_PR_PR_2|IWDG_PR_PR_1|IWDG_PR_PR_0); // 4096
 		   IWDG->RLR =3000;//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;

 }

int main(void)
{
	IWDT_init();
	RCC_init();
	init_systimer();

	APB_init();
	GPIO_init();
	timer_1_init();
	 timer_2_init();
	 timer_3_init();
	 timer_4_init();
	// USART1_Init();
	 USART1_DMA_Init();
     adc1_DMA1_init();

	I2C1_Init();

	 LCD_ini();
	LCD_Clear();


	 I2C1->CR1&=~ I2C_CR1_POS;
		 I2C1->CR1|=I2C_CR1_ACK;
	    I2C1->CR1|= I2C_CR1_START ;
	    while (!(I2C1->SR1& I2C_SR1_SB)){};
	    (void) I2C1->SR1;
	    I2C1->DR =  0b10100000 ;
	    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
	   (void) I2C1->SR1;
	    (void) I2C1->SR2;
	    I2C1->DR = 0;
		  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	      I2C1->DR = 1;
	    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    I2C1->CR1|= I2C_CR1_START;
		 while (!(I2C1->SR1& I2C_SR1_SB)){};
	    (void) I2C1->SR1;
	    I2C1->DR = 0b10100001;
	    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
	    (void) I2C1->SR1;
	    (void) I2C1->SR2;
	    while (!(I2C1->SR1& I2C_SR1_RXNE)){};
	     a1= I2C1->DR;
	     while (!(I2C1->SR1& I2C_SR1_RXNE)){};
	      a2= I2C1->DR;
	     I2C1->CR1&=~I2C_CR1_ACK;
	     I2C1->CR1|= I2C_CR1_STOP;

	            I2C1->CR1&=~ I2C_CR1_POS;
				 I2C1->CR1|=I2C_CR1_ACK;
			    I2C1->CR1|= I2C_CR1_START ;
			    while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR = 0b10100000;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			   (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    I2C1->DR = 2;
				  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			      I2C1->DR = 3;
			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			    I2C1->CR1|= I2C_CR1_START;
				 while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR = 0b10100001;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			    (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			       b1= I2C1->DR;
			     while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			        b2= I2C1->DR;
			     I2C1->CR1&=~I2C_CR1_ACK;
			     I2C1->CR1|= I2C_CR1_STOP;

			     I2C1->CR1&=~ I2C_CR1_POS;
				 I2C1->CR1|=I2C_CR1_ACK;
			    I2C1->CR1|= I2C_CR1_START ;
			    while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR =0b10100000;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			   (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    I2C1->DR= 4;
				  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			      I2C1->DR= 5;
			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			    I2C1->CR1|= I2C_CR1_START;
				 while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR = 0b10100001;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			    (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			    c1= I2C1->DR;
			     while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			     c2= I2C1->DR;
			     I2C1->CR1&=~I2C_CR1_ACK;
			     I2C1->CR1|= I2C_CR1_STOP;

			     I2C1->CR1&=~ I2C_CR1_POS;
				 I2C1->CR1|=I2C_CR1_ACK;
			    I2C1->CR1|= I2C_CR1_START ;
			    while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR = 0b10100000;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			   (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    I2C1->DR= 6;
				  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			      I2C1->DR= 7;
			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			    I2C1->CR1|= I2C_CR1_START;
				 while (!(I2C1->SR1& I2C_SR1_SB)){};
			    (void) I2C1->SR1;
			    I2C1->DR = 0b10100001;
			    while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			    (void) I2C1->SR1;
			    (void) I2C1->SR2;
			    while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			    d1= I2C1->DR;
			     while (!(I2C1->SR1& I2C_SR1_RXNE)){};
			     d2= I2C1->DR;
			     I2C1->CR1&=~I2C_CR1_ACK;
			     I2C1->CR1|= I2C_CR1_STOP;



			      a=((unsigned int )a1<<8)|a2;
			     b=((unsigned int ) b1<<8)|b2;
			     c=((unsigned int )c1<<8)|c2;
			     d=((unsigned int ) d1<<8)|d2;
		//	     ADC1->CR2|=ADC_CR2_EXTSEL_2;

	ADC1->CR2 |= ADC_CR2_SWSTART;


	while(1)
   {




	   switch(menu_lcd)
	   {
	    case 0:
		   IWDG->KR= 0xAAAA;
          //if(nastroyki.flag_z==1)
          //{
		   if(adc_data[0]<a)
		   {
			   nastroyki.flag_obriv_a=1;
			   nastroyki.flag_obriv_b=0;
			   nastroyki.flag_obriv_c=0;

			   nastroyki.flag_port_peregruz=0;
			   timers.pauza1_B=0;
			   timers.pauza1_C=0;
			   timers.pauza1_D=0;
			   program_finich_obriv_a();


		   }
		   else
		   {

			   timers.pauza1_A=0;
			   GPIOB-> BSRR |=GPIO_BSRR_BS11;
		   }
		   if(adc_data[1]<b)
		   {
			   nastroyki.flag_obriv_b=1;
			   nastroyki.flag_obriv_a=0;
			   nastroyki.flag_obriv_c=0;
			   nastroyki.flag_port_peregruz=0;
			   timers.pauza1_C=0;
			  	timers.pauza1_D=0;
			  	 timers.pauza1_A=0;
			   program_finich_obriv_b();

		   }
		   else
		   {
			   timers.pauza1_B=0;
			   GPIOB-> BSRR |=GPIO_BSRR_BS10;
		   }
		   if(adc_data[2]<c)
		   {
			   nastroyki.flag_obriv_c=1;
			   nastroyki.flag_obriv_a=0;
			   nastroyki.flag_obriv_b=0;
			   nastroyki.flag_port_peregruz=0;
			   timers.pauza1_B=0;
			   timers.pauza1_D=0;
			   timers.pauza1_A=0;
			  program_finich_obriv_c();

		 	}
		 	else
		    {
		 		 nastroyki.flag_obriv_c=0;
		 		 timers.pauza1_C=0;
		 		 GPIOA-> BSRR |=GPIO_BSRR_BS7;
		 	}

		   if(adc_data[3]>d)
		 	{
			  nastroyki.flag_obriv_c=0;
			  nastroyki.flag_obriv_a=0;
			  nastroyki.flag_obriv_b=0;
			  nastroyki.flag_port_peregruz=1;
			  timers.pauza1_B=0;
			  timers.pauza1_C=0;
			  timers.pauza1_A=0;
			  program_finich_peregruz();

		 	}
		   else
		   {
			  nastroyki.flag_port_peregruz=0;
			  timers.pauza1_D=0;
			  GPIOA-> BSRR |=GPIO_BSRR_BS5;
		   }
          //}
		   if(adc_data[0]>a&&adc_data[1]>b&&adc_data[2]>c)
		   {
		   	 LCD_SetPos(12,0);
		   	 LCD_String("ON");
		   //	 LCD_SendChar('O');
		  // 	 LCD_SendChar('N');
		   	             nastroyki.flag_obriv_a=0;
		   				   nastroyki.flag_obriv_b=0;
		   				   nastroyki.flag_obriv_c=0;
		   				           timers.pauza1_B=0;
		   							  timers.pauza1_C=0;
		   							  timers.pauza1_A=0;
		   }
		   else
		   {
			  // nastroyki.flag_obriv_a=0;
			  	//		   nastroyki.flag_obriv_b=0;
			  	//		   nastroyki.flag_obriv_c=0;
		   	 LCD_SetPos(12,0);
		     LCD_String("OF");
		    // LCD_SendChar('O');
		   //  LCD_SendChar('F');
		   }


	         LCD_SetPos(0,0);
	         LCD_String("Bobr_stm32");

	   break;
	    case 1:
		   IWDG->KR= 0xAAAA;
		   stroka_inf1();
		   //stroka_inform();
	  break;
		case 2:
		   IWDG->KR= 0xAAAA;
		          I2C1->CR1|=I2C_CR1_ACK;
		  		 I2C1->CR1|= I2C_CR1_START;
		  		 while (!(I2C1->SR1& I2C_SR1_SB)){};
		  		 (void) I2C1->SR1;
		  		 I2C1->DR =0b11010000;
		  		 while (!(I2C1->SR1& I2C_SR1_ADDR)){};
		  		 (void) I2C1->SR1;
		  		 (void) I2C1->SR2;
		  		 I2C1->DR= 0b00000000;
		  		 while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		  		  I2C1->CR1|= I2C_CR1_START;
		  		 while (!(I2C1->SR1& I2C_SR1_SB)){};
		  		 (void) I2C1->SR1;
		  		 I2C1->DR= 0b11010001   ;
		  		 while (!(I2C1->SR1& I2C_SR1_ADDR)){};
		  		 (void) I2C1->SR1;
		  		 (void) I2C1->SR2;
		  		 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  sec= I2C1->DR;
		  		 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  min= I2C1->DR;
		  		 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  hour=I2C1->DR;
		  		 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  day=I2C1->DR;
		  		  while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		 date=I2C1->DR;
		  		while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  month=I2C1->DR;			  			 			     	            	 		//I2C2->CR1&=~I2C_CR1_ACK;
		  		while (!(I2C1->SR1& I2C_SR1_RXNE)){};
		  		  year = I2C1->DR;
		  		 I2C1->CR1&=~I2C_CR1_ACK;
		  		 I2C1->CR1|= I2C_CR1_STOP;

		  		sec = RTC_ConvertFromDec(sec); //����������� � ���������� ������
		  		min = RTC_ConvertFromDec(min); //����������� � ���������� ������
		  	   hour = RTC_ConvertFromDec(hour); //����������� � ���������� ������
		  		day = RTC_ConvertFromDec(day); //����������� � ���������� ������
		  		year = RTC_ConvertFromDec(year); //����������� � ���������� ������
		  		  month = RTC_ConvertFromDec(month); //����������� � ���������� ������
		  		  date = RTC_ConvertFromDec(date); //����������� � ���������� ������ uart_transmit ()
		  	     sprintf(buf9,"%02d.%02d.20%02d  -%d     ", date, month,year,day);
		  		    LCD_SetPos(0,0);
		  		   LCD_String(buf9);
		  		 sprintf(buf10,"%02d:%02d:%02d       ",hour,min,sec);
		  		  LCD_SetPos(0,1);
		  		   LCD_String(buf10);
         break;
    	case 3:
		   IWDG->KR= 0xAAAA;
		   GPIOA->BSRR|=GPIO_BSRR_BS12;


	    	    sprintf(buf0,"a=%4d    ",a);
	    		LCD_SetPos(0,0);
	    	    LCD_String(buf0);

	    	     a1=a/256;
	    	     a2=a%256;

	    	    if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
	    		{

	    	    	nastroyki.pauza2++;
	    		   if(nastroyki.pauza2> 200)
	    		   {
	    			   nastroyki.flag2=1;

	    		    }
	    		  }
	    		 else
	    		{
	    			 nastroyki.pauza2++;
	    		  if(nastroyki.pauza2>200)
	    		  {
	    			  nastroyki.flag3=1;
	    		   }
	    	     }
				 if(nastroyki.flag2==1&&nastroyki.flag3==1)
	    	      {
					 nastroyki.flag2=0;
					 nastroyki.flag3=0;
					 nastroyki.pauza2=0;
					 nastroyki.pauza3=0;

	    			  I2C1->CR1|=  I2C_CR1_ACK;  							//   I2C1->CR1|=  I2C_CR1_ACK;
	    			  I2C1->CR1|= I2C_CR1_START;
	    			  while (!(I2C1->SR1& I2C_SR1_SB)){};
	    			  (void) I2C1->SR1;
	    			   I2C1->DR = 0b10100000;
	    			  while (!(I2C1->SR1& I2C_SR1_ADDR)){};
	    			  (void) I2C1->SR1;
	    			  (void) I2C1->SR2;
	    			   I2C1->DR= 0;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=1;//0b00000000  ;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=a1;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			   I2C1->DR=a2;
	    			   while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			   I2C1->CR1|= I2C_CR1_STOP;

	    	 }

				 if(adc_data[0]>a)
				 {
					 LCD_SetPos(12,0);
					LCD_String("R ");
				 }
				 else
				 {
					 LCD_SetPos(12,0);
					LCD_String("N ");
				 }
				danie.result_a=adc_data[0];
				 sprintf(nastroyki.buf6,"a1=%4d     ",danie.result_a);
					    		LCD_SetPos(0,1);
					    	    LCD_String(nastroyki.buf6);

		break;
		 case 4:
		   IWDG->KR= 0xAAAA;
	    	    sprintf(buf2,"b=%4d  ",b);
	    		LCD_SetPos(0,0);
	    	    LCD_String(buf2);

	    	       b1=b/256;
	    	       b2=b%256;
	    	    if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
	    		{

	    	    	nastroyki.pauza2++;
	    		   if(nastroyki.pauza2> 200)
	    		   {
	    			   nastroyki.flag2=1;

	    		    }
	    		  }
	    		 else
	    		{
	    			 nastroyki.pauza2++;
	    		  if(nastroyki.pauza2>200)
	    		  {
	    			  nastroyki.flag3=1;
	    		   }
	    	     }
				 if(nastroyki.flag2==1&&nastroyki.flag3==1)
	    	      {
					 nastroyki.flag2=0;
					 nastroyki.flag3=0;
					 nastroyki.pauza2=0;
					 nastroyki.pauza3=0;

	    			    I2C1->CR1|=  I2C_CR1_ACK;
	    			  I2C1->CR1|= I2C_CR1_START;
	    			  while (!(I2C1->SR1& I2C_SR1_SB)){};
	    			  (void) I2C1->SR1;
	    			   I2C1->DR = 0b10100000;
	    			  while (!(I2C1->SR1& I2C_SR1_ADDR)){};
	    			  (void) I2C1->SR1;
	    			  (void) I2C1->SR2;
	    			   I2C1->DR= 2;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=3;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=b1;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			   I2C1->DR=b2;
	    			   while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			   I2C1->CR1|= I2C_CR1_STOP;

	    	       }
				 if(adc_data[1]>b)
				 {
				 	LCD_SetPos(12,0);
				 	LCD_String("R");
				 }
				 else
				 {
				 	LCD_SetPos(12,0);
				 	LCD_String("N");
				 }
				 danie.result_b=adc_data[1];
				sprintf(nastroyki.buf7,"b1=%4d     ",danie.result_b);
				LCD_SetPos(0,1);
				LCD_String(nastroyki.buf7);
		break;
		case 5:
		        IWDG->KR= 0xAAAA;

		    	    sprintf(buf4,"c=%4d   ",c);
		    		LCD_SetPos(0,0);
		    	    LCD_String(buf4);

		    	    c1=c/256;
		    	    c2=c%256;

		    	    if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
		    		{

		    	    	nastroyki.pauza2++;
		    		   if(nastroyki.pauza2> 200)
		    		   {
		    			   nastroyki.flag2=1;

		    		    }
		    		  }
		    		 else
		    	  	{
		    			 nastroyki.pauza2++;
		    		  if(nastroyki.pauza2>200)
		    		  {
		    			  nastroyki.flag3=1;
		    		   }
		    	     }
					 if(nastroyki.flag2==1&&nastroyki.flag3==1)
		    	      {
						 nastroyki.flag2=0;
						 nastroyki.flag3=0;
						 nastroyki.pauza2=0;
						 nastroyki.pauza3=0;
		    			   //I2C1->CR1|=  I2C_CR1_ACK;
		    			  I2C1->CR1|= I2C_CR1_START;
		    			  while (!(I2C1->SR1& I2C_SR1_SB)){};
		    			  (void) I2C1->SR1;
		    			   I2C1->DR = 0b10100000;
		    			  while (!(I2C1->SR1& I2C_SR1_ADDR)){};
		    			  (void) I2C1->SR1;
		    			  (void) I2C1->SR2;
		    			   I2C1->DR= 4;
		    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		    			    I2C1->DR=5;
		    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		    			    I2C1->DR=c1;
		    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		    			   I2C1->DR=c2;
		    			   while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		    			   I2C1->CR1|= I2C_CR1_STOP;

		    	 }
					 if(adc_data[2]>c)
					 {
					 	LCD_SetPos(12,0);
					 	LCD_String("R");
					 }
					else
					 {
					   LCD_SetPos(12,0);
					   LCD_String("N");
					 }
					 danie.result_c=adc_data[2];
					 sprintf(nastroyki.buf10,"c1=%4d    ",danie.result_c);
					 LCD_SetPos(0,1);
					LCD_String(nastroyki.buf10);
		 break;
		 case 6:

		   			 IWDG->KR= 0xAAAA;

	    	    sprintf(buf6,"d=%4d    ",d);
	    		LCD_SetPos(0,0);
	    	    LCD_String(buf6);

	    	    d1=d/256;
	    	    d2=d%256;
	    	    if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
	    		{

	    	    	nastroyki.pauza2++;
	    		   if(nastroyki.pauza2> 200)
	    		   {
	    			   nastroyki.flag2=1;

	    		    }
	    		  }
	    		 else
	    		{
	    			 nastroyki.pauza2++;
	    		  if(nastroyki.pauza2>200)
	    		  {
	    			  nastroyki.flag3=1;
	    		  }
	    	     }
				 if(nastroyki.flag2==1&&nastroyki.flag3==1)
	    	      {
					 nastroyki.flag2=0;
					 nastroyki.flag3=0;
					 nastroyki.pauza2=0;
					 nastroyki.pauza3=0;

	    		      //I2C1->CR1|=  I2C_CR1_ACK;
	    			  I2C1->CR1|= I2C_CR1_START;
	    			  while (!(I2C1->SR1& I2C_SR1_SB)){};
	    			  (void) I2C1->SR1;
	    			   I2C1->DR = 0b10100000;
	    			  while (!(I2C1->SR1& I2C_SR1_ADDR)){};
	    			  (void) I2C1->SR1;
	    			  (void) I2C1->SR2;
	    			   I2C1->DR= 6;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=7;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			    I2C1->DR=d1;
	    			    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
	    			   I2C1->DR = d2;
	    			   while (!(I2C1->SR1 & I2C_SR1_TXE)){};

	    			   I2C1->CR1|= I2C_CR1_STOP;

	    	      }
				 if(adc_data[3]>d)
				 {
				   LCD_SetPos(12,0);
				 	LCD_String("N");
				 }
				else
				 {
				   LCD_SetPos(12,0);
				   LCD_String("R");
				 }
				 danie.result_d=adc_data[3];
				sprintf(nastroyki.buf9,"d1=%4d",danie.result_d);
				LCD_SetPos(0,1);
				LCD_String(nastroyki.buf9);
	  break;
		case 7:
		   IWDG->KR= 0xAAAA;
		   GPIOA->BSRR|=GPIO_BSRR_BR12;
		   sprintf(nastroyki.buf0,"day1=   -%d      ",day);
		 		  		    LCD_SetPos(0,0);
		 		  		   LCD_String(nastroyki.buf0);
		 		  		 LCD_SetPos(0,1);
		 		  	 LCD_String("           ");
		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
		 		  	{

		 		  	  nastroyki.pauza2++;
		 		  	  if(nastroyki.pauza2> 200)
		 		  	    {
		 		  		  nastroyki.flag2=1;

		 		  	     }
		 		  	}
		 		  	else
		 		  	{
		 		  	 nastroyki.pauza2++;
		 		  	  if(nastroyki.pauza2>200)
		 		  	  {
		 		  		 nastroyki.flag3=1;
		 		  	  }
		 		  	}
		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
		 		  {
		 		  	nastroyki.flag2=0;
		 		  	nastroyki.flag3=0;
		 		  	nastroyki.pauza2=0;
		 		  	nastroyki.pauza3=0;

		 		    I2C1->CR1|=  I2C_CR1_ACK;
		 		    I2C1->CR1|= I2C_CR1_START;
		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
		 		  	(void) I2C1->SR1;
		 		  	I2C1->DR = 0b11010000 ;
		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
		 		  	(void) I2C1->SR1;
		 		  	(void) I2C1->SR2;
		 		  	I2C1->DR= 0x03  ;
		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		 		    I2C1->DR=RTC_ConvertFromBinDec(day);
		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		 		     I2C1->CR1|= I2C_CR1_STOP;

		 		  }

		 break;
		 case 8:
		   IWDG->KR= 0xAAAA;
		   sprintf(nastroyki.buf1,"year1=20%02d       ",year);
		 		  		    LCD_SetPos(0,0);
		 		  		   LCD_String(nastroyki.buf1);
		 		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
		 		 		  	{

		 		 		  	  nastroyki.pauza2++;
		 		 		  	  if(nastroyki.pauza2> 200)
		 		 		  	    {
		 		 		  		  nastroyki.flag2=1;

		 		 		  	     }
		 		 		  	}
		 		 		  	else
		 		 		  	{
		 		 		  	 nastroyki.pauza2++;
		 		 		  	  if(nastroyki.pauza2>200)
		 		 		  	  {
		 		 		  		 nastroyki.flag3=1;
		 		 		  	  }
		 		 		  	}
		 		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
		 		 		  {
		 		 		  	nastroyki.flag2=0;
		 		 		  	nastroyki.flag3=0;
		 		 		  	nastroyki.pauza2=0;
		 		 		  	nastroyki.pauza3=0;


		 		 		    I2C1->CR1|= I2C_CR1_START;
		 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
		 		 		  	(void) I2C1->SR1;
		 		 		  	I2C1->DR = 0b11010000 ;
		 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
		 		 		  	(void) I2C1->SR1;
		 		 		  	(void) I2C1->SR2;
		 		 		  	I2C1->DR= 0x06  ;
		 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		 		 		    I2C1->DR=RTC_ConvertFromBinDec(year);
		 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
		 		 		     I2C1->CR1|= I2C_CR1_STOP;

		 		 		  }

		 break;
		 case 9:
		   IWDG->KR= 0xAAAA;
		   sprintf(nastroyki.buf2,"month1=%02d        ", month);
		 		  		    LCD_SetPos(0,0);
		 		  		   LCD_String(nastroyki.buf2);
			 		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
			 		 		  	{

			 		 		  	  nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2> 200)
			 		 		  	    {
			 		 		  		  nastroyki.flag2=1;

			 		 		  	     }
			 		 		  	}
			 		 		  	else
			 		 		  	{
			 		 		  	 nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2>200)
			 		 		  	  {
			 		 		  		 nastroyki.flag3=1;
			 		 		  	  }
			 		 		  	}
			 		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
			 		 		  {
			 		 		  	nastroyki.flag2=0;
			 		 		  	nastroyki.flag3=0;
			 		 		  	nastroyki.pauza2=0;
			 		 		  	nastroyki.pauza3=0;

			 		 		    I2C1->CR1|=  I2C_CR1_ACK;
			 		 		    I2C1->CR1|= I2C_CR1_START;
			 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	I2C1->DR = 0b11010000 ;
			 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	(void) I2C1->SR2;
			 		 		  	I2C1->DR= 0x05  ;
			 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		    I2C1->DR=RTC_ConvertFromBinDec(month);
			 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		     I2C1->CR1|= I2C_CR1_STOP;

			 		 		  }

		break;
	   case 10:
		   IWDG->KR= 0xAAAA;
		   sprintf(nastroyki.buf3,"date1=%02d           ",date);
		 		  		    LCD_SetPos(0,0);
		 		  		   LCD_String(nastroyki.buf3);
			 		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
			 		 		  	{

			 		 		  	  nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2> 200)
			 		 		  	    {
			 		 		  		  nastroyki.flag2=1;

			 		 		  	     }
			 		 		  	}
			 		 		  	else
			 		 		  	{
			 		 		  	 nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2>200)
			 		 		  	  {
			 		 		  		 nastroyki.flag3=1;
			 		 		  	  }
			 		 		  	}
			 		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
			 		 		  {
			 		 		  	nastroyki.flag2=0;
			 		 		  	nastroyki.flag3=0;
			 		 		  	nastroyki.pauza2=0;
			 		 		  	nastroyki.pauza3=0;

			 		 		    I2C1->CR1|=  I2C_CR1_ACK;
			 		 		    I2C1->CR1|= I2C_CR1_START;
			 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	I2C1->DR = 0b11010000 ;
			 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	(void) I2C1->SR2;
			 		 		  	I2C1->DR= 0x04  ;
			 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		    I2C1->DR=RTC_ConvertFromBinDec(date);
			 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		     I2C1->CR1|= I2C_CR1_STOP;

			 		 		  }


		break;
	    case 11:
		   IWDG->KR= 0xAAAA;
		   LCD_SetPos(0,0);
		   LCD_String("                   ");
		   sprintf(nastroyki.buf4,"hour1=  %02d           ",hour);
		  		  		  LCD_SetPos(0,1);
		  		  		   LCD_String(nastroyki.buf4);
			 		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
			 		 		  	{

			 		 		  	  nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2> 200)
			 		 		  	    {
			 		 		  		  nastroyki.flag2=1;

			 		 		  	     }
			 		 		  	}
			 		 		  	else
			 		 		  	{
			 		 		  	 nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2>200)
			 		 		  	  {
			 		 		  		 nastroyki.flag3=1;
			 		 		  	  }
			 		 		  	}
			 		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
			 		 		  {
			 		 		  	nastroyki.flag2=0;
			 		 		  	nastroyki.flag3=0;
			 		 		  	nastroyki.pauza2=0;
			 		 		  	nastroyki.pauza3=0;

			 		 		    I2C1->CR1|=  I2C_CR1_ACK;
			 		 		    I2C1->CR1|= I2C_CR1_START;
			 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	I2C1->DR = 0b11010000 ;
			 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	(void) I2C1->SR2;
			 		 		  	I2C1->DR= 0x02  ;
			 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		    I2C1->DR=RTC_ConvertFromBinDec(hour);
			 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		     I2C1->CR1|= I2C_CR1_STOP;

			 		 		  }
		break;
	   case 12:
	         IWDG->KR= 0xAAAA;
		   sprintf(nastroyki.buf5," min1 =%02d          ",min);
		  		  		  LCD_SetPos(0,0);
		  		  		   LCD_String(nastroyki.buf5);
		  		  		 LCD_SetPos(0,1);
		  		  			        LCD_String("           ");
			 		 		  if((GPIOB->IDR&GPIO_IDR_IDR9)==0)
			 		 		  	{
                                  sec=0;
			 		 		  	  nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2> 200)
			 		 		  	    {
			 		 		  		  nastroyki.flag2=1;

			 		 		  	     }
			 		 		  	}
			 		 		  	else
			 		 		  	{
			 		 		  	 nastroyki.pauza2++;
			 		 		  	  if(nastroyki.pauza2>200)
			 		 		  	  {
			 		 		  		 nastroyki.flag3=1;
			 		 		  	  }
			 		 		  	}
			 		 		  if(nastroyki.flag2==1&&nastroyki.flag3==1)
			 		 		  {
			 		 		  	nastroyki.flag2=0;
			 		 		  	nastroyki.flag3=0;
			 		 		  	nastroyki.pauza2=0;
			 		 		  	nastroyki.pauza3=0;

			 		 		    I2C1->CR1|=  I2C_CR1_ACK;
			 		 		    I2C1->CR1|= I2C_CR1_START;
			 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	I2C1->DR = 0b11010000 ;
			 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	(void) I2C1->SR2;
			 		 		  	I2C1->DR= 0x01  ;
			 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		    I2C1->DR=RTC_ConvertFromBinDec(min);
			 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		     I2C1->CR1|= I2C_CR1_STOP;

			 		 		    I2C1->CR1|=  I2C_CR1_ACK;
			 		 		    I2C1->CR1|= I2C_CR1_START;
			 		 		    while (!(I2C1->SR1& I2C_SR1_SB)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	I2C1->DR = 0b11010000 ;
			 		 		  	while (!(I2C1->SR1& I2C_SR1_ADDR)){};
			 		 		  	(void) I2C1->SR1;
			 		 		  	(void) I2C1->SR2;
			 		 		  	I2C1->DR= 0x00  ;
			 		 		  	while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		    I2C1->DR=RTC_ConvertFromBinDec(sec);
			 		 		    while (!(I2C1->SR1 & I2C_SR1_TXE)){};
			 		 		     I2C1->CR1|= I2C_CR1_STOP;

			 		 		  }
     break;
	 case 13:
		   menu_lcd=0;

	  	}
   }
}

 

 

Изменено пользователем makc
Спойлер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) не указан процессор
2) Во многих STM32 регистр IFCR контроллера DMA не предназначен для чтения ,( а не как у Вас).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 31.08.2022 в 23:29, GenaSPB сказал:

1) не указан процессор
2) Во многих STM32 регистр IFCR контроллера DMA не предназначен для чтения ,( а не как у Вас).

Да любой процессор. Только разница в том что в stm32f103 eneble.A в stm32f411там ты включаешь  level 1 .level 2.Но процедура такова у меня получается что сначала прошиваем потом выставляем байт защиты. И нельзя  потом прочитать.А вот как программу составить и прописать я слышал что так можно? Кто подскажет из спецов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, dimir сказал:

сначала прошиваем потом выставляем байт защиты. И нельзя  потом прочитать

Именно для этого защита и активируется - чтобы нельзя было прочитать, не так ли? То есть защита сделала именно то, что вы от нее попросили. Что вам не нравится?

3 часа назад, dimir сказал:

А вот как программу составить и прописать я слышал что так можно?

Вот признайтесь честно: вы сами поняли, что тут написали? Я - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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