dimir 2 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Решил я защитить свою прошивку. И установил бит защиты. И бац lcd перестало работать при установки этого бита. В чём загвоздка?Кто из спецов подскажет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 22 минуты назад, dimir сказал: В чём загвоздка? В коде, разумеется, в чем еще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба В 31.08.2022 в 08:34, Arlleex сказал: В коде, разумеется, в чем еще. И что нужно подправить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Ау спецы вы где?В плен попали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 10 минут назад, dimir сказал: Ау спецы вы где?В плен попали? Все телепаты в перманентном отпуске. А с вашим уровнем детализации описания проблем нужны именно телепаты... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_ 54 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 2 часа назад, dimir сказал: И что нужно подправить? Код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 31 августа, 2022 Опубликовано 31 августа, 2022 (изменено) · Жалоба А я попробывал другой вариант.Сначала прошил.Потом установил 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; } } } Изменено 1 сентября, 2022 пользователем makc Спойлер 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Как это развидеть? 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 1) не указан процессор 2) Во многих STM32 регистр IFCR контроллера DMA не предназначен для чтения ,( а не как у Вас). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба Тема почищена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 6 сентября, 2022 Опубликовано 6 сентября, 2022 · Жалоба В 31.08.2022 в 23:29, GenaSPB сказал: 1) не указан процессор 2) Во многих STM32 регистр IFCR контроллера DMA не предназначен для чтения ,( а не как у Вас). Да любой процессор. Только разница в том что в stm32f103 eneble.A в stm32f411там ты включаешь level 1 .level 2.Но процедура такова у меня получается что сначала прошиваем потом выставляем байт защиты. И нельзя потом прочитать.А вот как программу составить и прописать я слышал что так можно? Кто подскажет из спецов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 6 сентября, 2022 Опубликовано 6 сентября, 2022 · Жалоба 3 часа назад, dimir сказал: сначала прошиваем потом выставляем байт защиты. И нельзя потом прочитать Именно для этого защита и активируется - чтобы нельзя было прочитать, не так ли? То есть защита сделала именно то, что вы от нее попросили. Что вам не нравится? 3 часа назад, dimir сказал: А вот как программу составить и прописать я слышал что так можно? Вот признайтесь честно: вы сами поняли, что тут написали? Я - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться