一.高低电平控制灯亮灭
-
(1)新建项目
-
(2)选择芯片为STM32F103C8,并双击建立项目
-
(3)配置如下
- 注:PB0为开关,选择GPIO_EXIT0,PA1为灯,设置为output,并将PA1的GPIO output level设为high
-
(4)做如图修改
-
(5)生成代码
- (6)在keil中(main函数外)加入代码如下
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
GPIO_PinState b0_pin = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0); // 读取b0的状态
b0_pin=1-b0_pin;
switch (GPIO_Pin){//判断引脚
case GPIO_PIN_0:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,1-b0_pin); // 将a1写入与b0相同的电位
break;
}
}
-
(7)烧录
-
注:烧录时boot0置1,断电,boot0置0,再通电
二.中断串口通信
- (1)SYS和RCC配置同上
- (2)配置如下
-
(3)生成代码
-
(4)加入代码
-
加入在头文件后
#define LENGTH 10 // 接收缓冲区大小
uint8_t RxBuffer[LENGTH]; // 接收缓冲区
uint8_t Rxflag = 0; // 标志位,0为接收未完成,1为接收完成
- 加入在main函数中
HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); // 使能接收中断
char data[] = "\nReveive Success\n"; // 接收成功信息
- 加入在while循环中
if (Rxflag == 1){ // 若数据接收完成
Rxflag = 0; // 清除标志位
HAL_UART_Transmit(&huart1, (uint8_t *)data, 18, 0xFFFF); // 接收成功信息
// 发送接收到的字符
HAL_UART_Transmit_IT(&huart1, (uint8_t*)RxBuffer, LENGTH);
}
- 加入在main函数外回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if (huart->Instance == USART1){
Rxflag = 1; // 设置标志位为1
HAL_UART_Receive_IT(&huart1, (uint8_t*)&RxBuffer, LENGTH); // 使能接收中断
}
}
-
(5)烧录
-
(6)发送1开始接收hello Windows
-
(7)发送0中断接收