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.
#include "stm32f4xx.h"
void delay_ms(uint16_t dly){ uint32_t f; for(;dly>0;dly--) { for(f=250;f>0;f--); for(f=250;f>0;f--); }}
GPIO_InitTypeDef GPIO_InitStruct;int main(){
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD,&GPIO_InitStruct); GPIO_SetBits(GPIOD,GPIO_Pin_4);
while(1) { GPIO_SetBits(GPIOD,GPIO_Pin_4); delay_ms(1000); GPIO_ResetBits(GPIOD,GPIO_Pin_4); delay_ms(1000); }}
Have the loop iterators be volatile so they don't optimize away.
Single step the code, or use a scope to observe a single.
Perhaps avoid arbitrary constants in delay loops.
Or better yet, get off that bandwagon. Trying to implement delays by way of empty loops is just about always wrong. There are rare cases where it's the only option available, but beginners are very unlikely to run across any of those. By the time in a developer's career they face one of them, they'll hopefully have the wisdom to know what to use when.