一、建立项目模板
这里的user中重复引用了system_stm32f10x.c
Output中选择Create HEXFile,并且可以选择输出路径。
Listing中可以选择输出路径。
然后在C/C++中加入两个宏:
-
STM32F10X_MD,USE_STDPERIPH_DRIVER
并且还要勾选One ELF Section per Function,加入头文件路径:
在Debug中,使用J-Link,并设置
在Utilities,选择J-Link并Setting中:
二、写点LED代码
GPIO初始化:
/**8位的LED的IO口***/ #define PIN_LED (GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15) void LED_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = PIN_LED; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*打开LED使用的GPIO的时钟使能*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*进行初始化*/ GPIO_Init(GPIOB, &GPIO_InitStructure); }
设置多位GPIO电平:
/**************************** * Function Name : LED_SET * Description : 设置LED的状态,使用了8位。因为一次使用16位,所以要先读取 * Input : data * Output : None * Return : None *****************************/ void LED_SET(uint8_t data) { uint16_t setValue; setValue = GPIO_ReadOutputData(GPIOB); setValue &= 0x00ff; //使用高8位 setValue |= (uint16_t)data <<8; GPIO_Write(GPIOB, setValue); }
简单的main函数
/**************************************************************************** * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None ****************************************************************************/ int main(void) { LED_INIT(); LED_SET(0x0f); while (1) { LED_SET(0xff); Delay(10); LED_SET(0x00); Delay(10); } } /******************************************************************************* * Function Name : Delay * Description : ???±???ò * Input : c * Output : None * Return : None *******************************************************************************/ void Delay(uint16_t c) { uint16_t a,b; for(; c>0; c--) for(a=1000; a>0; a--) for(b=1000; b>0; b--); }
可以直接设置单独的GIPO输出位:
GPIO_WriteBit(GPIOB, GPIO_Pin_15, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_15, Bit_RESET);