We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
i am using KEIL in my project. i am using STM32F030 as transmitter and STM32F4 as a receiver. When i run my code in debug mode both of them work properly. But when i press terminate and re-insert my ST-LINK device i can't see any data in my receiver (also i see that receiver and transmitter connects). How can i download the code and use it without debug mode? I see that similar questions are there already. But they did'nt work for me. In main.c there are only CubeMX configurations. So i share only my dht22.c file
main.c
dht22.c
Here is my code:
/* #include "main.h" //buraya don #include "stm32f0xx_hal.h" #include "dht22.h" uint8_t nem_byte1, nem_byte2, sicaklik_byte1, sicaklik_byte2,checksum, verilerin_toplami; uint16_t nem, sicaklik,sicaklik1,nem1,timer_sayac_degeri; void delay_ticks(uint32_t ticks) { //SYSTICK TIMER 24 BIT SysTick->LOAD = ticks; //girilen süre için gerekli tick sayısı SysTick->VAL = 0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK_DIV8; SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; //COUNTFLAG,counter 0 oldugunda 1 oluyo. //okundugunda otomatik oalrak temizleniyo while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); SysTick->CTRL = 0; } void delay_us(uint32_t us) { delay_ticks(us * 8); } static inline void delay_ms(uint32_t ms) { delay_ticks(ms * 8000); } GPIO_InitTypeDef GPIO_InitStruct = {0}; void pini_giris_yap (void) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } /*Configure GPIO pin : PA2 */ void pini_cikis_yap (void) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void DHT22_baslat (void) { pini_cikis_yap(); HAL_GPIO_WritePin (GPIOA, GPIO_PIN_5, 0); // baslangica sinyali delay_us(1100); HAL_GPIO_WritePin (GPIOA, GPIO_PIN_5, 1); // sensorden gelecek cevabi bekle delay_us(30); pini_giris_yap(); } void sensorden_yanit_al (void) { delay_us(120); //datasheete gore 80-160 arasi bir deger while ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5))); } uint8_t veri_oku(void) { uint8_t i,j; for (j=0;j<8;j++) { while (!(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5))); // pin 1 olana keder bekle delay_us(40); // 50 yapinca calismiyo if ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5)) == 0) { i&= ~(1<<(7-j)); // alinan bit 0 } else i|= (1<<(7-j)); // alinan bit 1 while (HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5 && ((TIM3->CNT-timer_sayac_degeri)==1600) )); //problem olursa 200 us sonra devam et } return i; } void oku(void){ DHT22_baslat (); sensorden_yanit_al (); nem_byte1 = veri_oku(); nem_byte2 = veri_oku(); sicaklik_byte1 = veri_oku(); sicaklik_byte2 = veri_oku(); checksum = veri_oku();// check-sum should be the last 8 bit of "8 bit integral RH data+8 bit decimal RH //data+8 bit integral T data+8 bit decimal T data". verilerin_toplami=(nem_byte1+nem_byte2+sicaklik_byte1+sicaklik_byte2); // HAL_UART_Transmit(&huart1,(uint8_t*)"resul\r\n",sizeof("resul\r\n")-1,100); if ((checksum) == verilerin_toplami) { sicaklik = ((sicaklik_byte1<<8)|sicaklik_byte2); nem = ((nem_byte1<<8)|nem_byte2); } }
/
sorry for bad formatting, but i can't edit the post
hernancrespo89 said:/* #include "main.h" //buraya don #include "stm32f0xx_hal.h" #include "dht22.h" uint8_t nem_byte1, nem_byte2, sicaklik_byte1, sicaklik_byte2,checksum, verilerin_toplami; uint16_t nem, sicaklik,sicaklik1,nem1,timer_sayac_degeri; void delay_ticks(uint32_t ticks) { //SYSTICK TIMER 24 BIT SysTick->LOAD = ticks; //girilen süre için gerekli tick sayısı SysTick->VAL = 0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK_DIV8; SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; //COUNTFLAG,counter 0 oldugunda 1 oluyo. //okundugunda otomatik oalrak temizleniyo while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); SysTick->CTRL = 0; } void delay_us(uint32_t us) { delay_ticks(us * 8); } static inline void delay_ms(uint32_t ms) { delay_ticks(ms * 8000); } GPIO_InitTypeDef GPIO_InitStruct = {0}; void pini_giris_yap (void) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } /*Configure GPIO pin : PA2 */ void pini_cikis_yap (void) { GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void DHT22_baslat (void) { pini_cikis_yap(); HAL_GPIO_WritePin (GPIOA, GPIO_PIN_5, 0); // baslangica sinyali delay_us(1100); HAL_GPIO_WritePin (GPIOA, GPIO_PIN_5, 1); // sensorden gelecek cevabi bekle delay_us(30); pini_giris_yap(); } void sensorden_yanit_al (void) { delay_us(120); //datasheete gore 80-160 arasi bir deger while ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5))); } uint8_t veri_oku(void) { uint8_t i,j; for (j=0;j<8;j++) { while (!(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5))); // pin 1 olana keder bekle delay_us(40); // 50 yapinca calismiyo if ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5)) == 0) { i&= ~(1<<(7-j)); // alinan bit 0 } else i|= (1<<(7-j)); // alinan bit 1 while (HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5 && ((TIM3->CNT-timer_sayac_degeri)==1600) )); //problem olursa 200 us sonra devam et } return i; } void oku(void){ DHT22_baslat (); sensorden_yanit_al (); nem_byte1 = veri_oku(); nem_byte2 = veri_oku(); sicaklik_byte1 = veri_oku(); sicaklik_byte2 = veri_oku(); checksum = veri_oku();// check-sum should be the last 8 bit of "8 bit integral RH data+8 bit decimal RH //data+8 bit integral T data+8 bit decimal T data". verilerin_toplami=(nem_byte1+nem_byte2+sicaklik_byte1+sicaklik_byte2); // HAL_UART_Transmit(&huart1,(uint8_t*)"resul\r\n",sizeof("resul\r\n")-1,100); if ((checksum) == verilerin_toplami) { sicaklik = ((sicaklik_byte1<<8)|sicaklik_byte2); nem = ((nem_byte1<<8)|nem_byte2); } }
Probably is running, unless BOOT pin is floating.
Make sure to explicitly enable GPIOA clock before use.
Code could be added early in Reset_Handler to output to GPIO or UART to confirm it actually starts. Would get a UART up to allow debugging without a pod attached.
Make sure Error_Handler() and HardFault_Handler() flag if they end up there.
Thanks for answer.
Unfortunately i couldn't understand what you mean except GPIOA clock issue. I enabled GPIOA clock. Here is my new formatted code. Would you be more precise, please? I am a newbie.
https://pastebin.com/u8DLdnvy