一、新建工程
Step1. 新建工程:File -> New Project ->选择芯片 ->start project
Step2.IO配置:直接点击芯片图管脚设置(input 、 output)、右键 -> 重定义管脚名“enter user label”
![](https://i-blog.csdnimg.cn/blog_migrate/e1237c6f34bb6fba71b6b76ece7d6ac2.png)
Step3. 配置时钟树(内部时钟最大只能设置64Mhz)
![](https://i-blog.csdnimg.cn/blog_migrate/cfd6607f076793b8ac7e80c9ccd244f0.png)
Step4.配置IO口属性
![](https://i-blog.csdnimg.cn/blog_migrate/357c0da0245733cf2767545b3ef4eab9.png)
Step5.生成工程
![](https://i-blog.csdnimg.cn/blog_migrate/3ce80ac26b0457e5110132f154d72e32.png)
Step6.选择keil为生成工具
Step7.添加用户功能代码,必须在( /* USER CODE BEGIN 1 */ /* USER CODE END 1 */)之间修改。这样修改Cube工程配置的,代码才不会被覆盖。
![](https://i-blog.csdnimg.cn/blog_migrate/675791cf051adc835367fa8f1885c321.png)
Step8.在main.h中包含用户配置的宏定义
![](https://i-blog.csdnimg.cn/blog_migrate/a7826715ede7dbc3fd53ea397975e30e.png)
二、串口配置
![](https://i-blog.csdnimg.cn/blog_migrate/59292efc7a5c684d8ecc71a0c9b3c984.png)
Asynchronous 异步串口模式
Step1:查看生成文件中,串口操作的函数
![](https://i-blog.csdnimg.cn/blog_migrate/334ea0f40e4c3fe28d82bf67d99b3ac9.png)
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
1.UART_HandleTypeDef *huart : 串口的句柄结构体指针
系统配置时,已定义huart1.
![](https://i-blog.csdnimg.cn/blog_migrate/b2da198331888111e941dca2ca10cf40.png)
2 . pData:是要发送的数据的指针
3. Size:本次要发送的字符数量
4. Timeout:超时时间,单位是 ms。这是发送一个字符的超时时间,如果发送某个字符超过了所给的参数,则函数会返回 HAL_TIMEOUT。
三、添加回调函数
Step1. 添加自己写的程序,与库有关添加“#include "stm32f1xx_hal.h"”
Step2. 重写回调函数
![](https://i-blog.csdnimg.cn/blog_migrate/fa9b80e3ab1b59a5fc830c2c335cdaa4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/426af0bc99f9a9cdb45d523bb2defced.png)
main.c 里
![](https://i-blog.csdnimg.cn/blog_migrate/125aaffd149141d9bd8df3db060e89b8.png)
四、外部晶振配置
在RCC里面配置
![](https://i-blog.csdnimg.cn/blog_migrate/3b41fe84e5c6cf534fed0053247b5d5b.png)