为方便使用,用typedef来给变量起名将以下放入main.h中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
typedef int32_t  s32;
typedef int16_t s16;
typedef int8_t s8;

typedef const int32_t sc32;
typedef const int16_t sc16;
typedef const int8_t sc8;

typedef __IO int32_t vs32;
typedef __IO int16_t vs16;
typedef __IO int8_t vs8;

typedef __I int32_t vsc32;
typedef __I int16_t vsc16;
typedef __I int8_t vsc8;

typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;

typedef const uint32_t uc32;
typedef const uint16_t uc16;
typedef const uint8_t uc8;

typedef __IO uint32_t vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t vu8;

typedef __I uint32_t vuc32;
typedef __I uint16_t vuc16;
typedef __I uint8_t vuc8;

点亮led

GPIO用IO口的输出模式

1
2
3
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);//控制电平
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);//翻转电平
HAL_GPIO_ReadPin(GPIOA, GPIO_Pin_8);//读取电平

点亮led就需要按键了,按键首先要看按键的引脚设置IO口为输入模式,写一个案件处理函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1; //按键松开标志
if(mode==1)key_up=1; //支持连按
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
key_up=0;
if(KEY0==0) return KEY0_PRES;
else if(KEY1==0) return KEY1_PRES;
else if(WK_UP==1) return WKUP_PRES;
ALIENTEK MiniSTM32 V3.0 开发板教程
137
STM32 不完全手册(HAL 库版)
}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;
return 0; //无按键按下
}

在头文件中进行添加宏定义

1
2
3
4
5
6
7
8
9
10
11
12
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
#define KEY0 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5) //KEY0 按键 PC5
#define KEY1 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15) //KEY1 按键 PA15
#define WK_UP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //WKUP 按键 PA0
#define KEY0_PRES 1
#define KEY1_PRES 2
#define WKUP_PRES 3
void KEY_Init(void);
u8 KEY_Scan(u8 mode);
#endif

串口通信

usart和uart区别为 usart比uart多了同步时钟频率通信,都有异步时钟通信。

串口设置的一般步骤可以总结为如下几个步骤:

  1. 串口时钟使能,GPIO 时钟使能。
  2. 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。
  3. GPIO 初始化设置:要设置模式为复用功能。
  4. 串口参数初始化:设置波特率,字长,奇偶校验等参数。
  5. 开启中断并且初始化 NVIC,使能中断(如果需要开启中断才需要这个步骤)。
  6. 使能串口。
  7. 编写中断处理函数:函数名格式为 USARTxIRQHandler(x 对应串口号)。

串口通信的结构体如下

1
2
3
4
5
6
7
8
9
10
typedef struct
{
uint32_t BaudRate; //波特率
uint32_t WordLength; //字长
uint32_t StopBits; //停止位
uint32_t Parity; //奇偶校验
uint32_t Mode; //收/发模式设置
uint32_t HwFlowCtl; //硬件流设置
uint32_t OverSampling; //过采样设置
}UART_InitTypeDef