stm32f103c6按键点亮一个led用cubemx和keil和proteus
时间: 2024-10-17 12:10:59 浏览: 45
STM32F103C6是一款基于ARM Cortex-M3内核的微控制器,常用于嵌入式系统开发。要使用Cubemx、Keil和Proteus环境控制LED和按键,你可以按照以下步骤操作:
1. **配置Cubemx**:
- 新建项目并选择STM32F103C6作为芯片。
- 在"Pinout & GPIO"选项卡中,将GPIO端口连接到LED和按键对应的管脚上。例如,LED通常接PB0,按键可能用PA0。
- 设置GPIO模式为推挽输出(GPIO_Mode_Out_PP)和输入(GPIO_Mode_In_FLOATING)。
2. **编写Keil代码**:
- 在Keil MDK中创建一个新的源文件(.c),然后添加基本的头文件`stm32f1xx.h`和`stm32f1xx_gpio.h`。
```c
#include "stm32f1xx.h"
#include "stm32f1xx_gpio.h"
void LED_Init(void);
void LED_Toggle(void);
void Button_IRQHandler(void);
int main(void) {
// 初始化GPIO
LED_Init();
while (1) {
if (Button_GetStatus()) { // 按键按下
LED_Toggle(); // 点亮或熄灭LED
}
}
}
void LED_Init() {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开启GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PB0对应LED
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; // 输出推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_0); // LED初始设为低电平(关闭)
}
void LED_Toggle() {
GPIO_ToggleBits(GPIOB, GPIO_Pin_0); // 切换LED状态
}
EXTI_HandleTypeDef EXTI_Handle;
static uint8_t KeyState = 0;
void Button_IRQHandler() {
EXTI_Handle.Instance = GPIO_PIN_0; // PA0对应按钮
HAL_GPIO_EXTI_IRQHandler(&EXTI_Handle);
KeyState = !KeyState; // 按钮按下时,KeyState变反
}
```
3. **设置中断向量和服务函数**:
- 在Cubemx中,为PA0的中断事件设置一个服务函数,如上面代码中的`Button_IRQHandler()`。
4. **调试与仿真**:
- 使用Proteus模拟器,配置好相应的硬件连接,包括LED和按键。
- 将Keil工程链接到Proteus,并进行仿真。当模拟按键按下时,可以看到LED的状态变化。
阅读全文