一、工程创建
1、STM32cubeMX打底
先创建一个新的文件夹
打开cubeMX打底
看到是这个芯片型号就好了
先弄好时钟
时钟的配置最后出去是80
把文件定位在刚才创建的test文件夹里,注意要改成basic和MDK V5(keil 5)版本
这两个一定要勾
点击生成文件就好了
刚刚文件夹里面的文件就有质料了
进去编译一下0错误0警告就OK
二、点亮一个LED灯
1、cubeMX配置
LED原理图是PC8~PC15还有一个PD2的锁存器
将他们全部选中位output输出
按需求配置,如图要想灯一开始就是灭的,所以要设置成High(高电平)
锁存器一开始要关闭,就得是Low低电平。
生产文件是这样的就行
2、led.c
打开test的工程,和之前一样,建立led的.c和.h文件,不过要注意的是,.h要放在Inc里面定的文件夹,.c要放在Src文件夹
在文件夹里面新建一个DDA文件夹用来存放.c和.h文件
新建的文件要在瓶子跟魔法棒里面导入
3、led.h
要引用头文件main.h
4、灯的封装
先去main.h定义
#define uchar unsigned char
#define uint unsigned int 用来简化无符号字符和整形
在主函数main.c中记得引用头文件
主函数中初始化led
三、LCD屏幕
1、cubeMX配置
将对应的IO口全部设置位output就行
2、代码移植
复制这三个放在刚刚新建的DDA文件中
这样就行要在这里添加.c文件
在main.c中引用这两个文件
在参考例程那边把LCD的东西直接复制过来,记得LCD_Init();
记得在这里初始化LCD,然后就可以了
四、定时器按键
1、定时器cubeMX配置
一般选TIM3
按照上面步骤然后生成代码就好了
2、按键cubeMX配置
根据原理图确认所需的IO口
将所需的按键IO口全都设置为input输入模式
然后将按键设置成上拉
3、interrupt(中断回调函数)
配置完之后要先编译一下然后找到tim.文件拉到最后去找这句写进interrupt.c
写一个结构题给按键,这里注意用bool类型别忘了包含stdbool.h文件和声明刚刚的回调函数。
4、按键
1、短按键
在.c文件中这样写就行
记得在main.c文件中开启刚刚所配置的TIM3定时器,
然后就可以在while里面写给按键所需实现的功能了。
2、长按键
在.h文件里面添加表示长按键
在.c文件里面的写法,这里其实也包含了短按键,然后去main.c写需要实现的功能即可
五、PWM(脉冲输出)
1、cubeMX配置
以十一届的省赛题为例
根据题目所需的IO口来选择,用PWM一定要用到定时器的,而且要带CH1标识的,这个TIM3我用来写了按键了,所以这里选TIM16和TIM17
这里TIM16按照这样配置
往下拉这里随便给一个占空比初值,后面在程序里是可调的
这是TIM17的,这里不一样,其他都一样,然后生成程序就行了,至于为什么看下面
因为要的是100Hz和200Hz,所以100Hz计算80兆除两次达到100,200Hz计算80兆除200和除100,为了计算方便定重装载值是100,这样预分频系数定8000和4000,别忘了减一。
2、主函数
在初始化后面开启PWM就可以按照题目要求来写代码了。
这样用,可以新建两个新的文件,也可以在其他.c文件后面定义一个新的函数,然后直接在while里面调用就行了别忘记在main.c里面引用一下头文件
六、输入捕获(频率)
1、cubeMX配置

把这两个引脚使能,同样是CH1通道
把CH1改成输入模式
改预分频系数就行
打开中断,同时TIM3也是这样设置
2、keil写法
找到需要的中断回调函数,写在中断里
写法像这样
在.h里面声明一下这个回调函数
在main.c里面打开定时器,然后就OK了。
然后就是按键的TIM3定时器与这个冲突,所以需要将按键的定时器换一个,可以使用TIM4就行。
七、数模转换ADC
1、cubeMX配置
按照所需的IO口,都选择ADC_IN 输入模式
ADC1勾选到11
ADC2勾选15,其他参数不用管,直接生成就好
2、keil写法
使用adc要新建两个文件夹,但是这里我没有新建,直接在前面pwm新建的文件夹写一起了
注意新建的不能是adc.c因为系统生成了adc.c了。
写一下adc调用函数
然后在.h里面声明
别忘记在main.c里面引用头文件就OK了
八、IIC总线
1、cubeMX配置
PB6和PB7,把这两个引脚output就行,然后生成代码
2、移植官方的库
将官方库里面的这两个文件移植到我们一开始新建的DDA文件里面
keil里面记得要添加
3、IIC读写函数
写在IIC文件里面,这是读的函数
这是写的函数
回去.h文件去声明这两个函数就行。
主函数里面记得声明就行,然后就开始在主函数写实现功能。
九、USART串口
1、cubeMX配置
设置到异步模式,注意如果没配置LCD它默认引脚设置成PC4和PC5了,我们要手动改成PA9和PA10。
打开中断
2、主函数(发送)
这里要添加这个库
举个例子,比如发送这个数据波特率啥的要选对,然后发送就OK了
3、主函数(接收)
把刚刚写的发送注释掉,写一下接收的中断函数在中断.c里面
首先去uart.h找中断函数
主函数引用一下刚刚定义的变量写uart_rx_proc()
让他在屏幕中显示出来
下面处理一下接收的部分,因为要不断被接收,放在while里面
按理来说直接写uart_rx_proc();就行,但是为了保证接收的数据完整,要延时接收一下。
然后就ok了。