新建工程2

张开发
2026/4/21 7:28:29 15 分钟阅读

分享文章

新建工程2
我们把stm32最小开发板和stlink链接好后开始进入keil。打开魔术棒按钮选择debug这个调试器默认为ulink。所以我们改为stlink debug。然后点击旁边的setting按钮在flash Download里把reset and run这一项勾上。勾上这项后我们下载程序后会立马复位并执行这样方便一些。否则每次下载后还需要按上板子的复位按键才能执行程序。接下来点击确认ok。然后咱们再编译一次。然后点击编译旁边的load。如果此时灯不闪了就可以了。接下来我们配置三个寄存器进行点灯:我们可以打开stm32的参考手册。首先是rcc的一个寄存器来使能gpioc的时钟。GpIo都是apb2的外设。我们在参考文档中打开7.3.7apb2外设时钟使能寄存器。然后就能看到一个IOPCEN这一位就是使能G PIOC的时钟的。这位写1就是打开GPIOC的时钟写0就是关闭时钟。此时我们把第四位写为一二进制转换成16进制即为四个为一组。00000010。然后我们回到软件keil在while死循环之前写上rcc的APB2EDR寄存器等于0x00000010。这样就打开了GPIOC的时钟。然后是第二个寄存器我们需要配置一下PC13口的模式。我们在参考手册中可以找到8.2.2端口配置高寄存器gpiox_crh。这里面这个x是从a到e任意一个。里面的CNF13和mode13就是用来配置13号口的。首先cnf我们需要配置为通用推挽输出模式。mode配置为输出模式。此时16进制为0x00300000。停下来我们就可以给PC13口输出数据了。我们可以看到8.2.4端口输出数据寄存器GPIOX_ODR里有一位ODR13这一位写113号口就是高电平写0就是低电平。如果写1odr的值就是00002000。因为这个灯是低电平点亮的所以我们给odr全为零就是点亮。那么给odr这个值就是灭。这种操作需要我们不断的查找参考手册里寄存器的每一位都是干嘛的。很麻烦。接下来我们就添加库函数看看库函数和寄存器的操作方式有哪些区别。我们打开工程文件夹2-1然后在里面新建一个文件夹叫做library用来放库函数。接着打开固件库的文件夹打开librariesstm32标准外设驱动英文版src。然后在src里面就是库函数的源文件。misc是内核的库函数其他的就是内核外的外设库函数了。按ctrl a全选然后复制。粘贴到刚才新建的的library文件夹中。接下来再打开src上面的inc文件夹。这里面是库函数的头文件。我们把他们也全复制粘贴到library文件夹里。接下来打开keil软件然后右键target1添加新的组改名字叫library。右键这个新组添加已经存在的文件打开library ctrlA add。但是对于这个函数来说还不能直接使用我们需要再添加一个文件。我们打开固态库文件夹打开project- stm32f10x……template。可以看到tm32f10x_conf.h和两个It结尾的文件。这里的confConfiguration文件是用来配置库函数头文件的包含关系的。里面还有用来参数检查的函数定义这是所有函数都需要的。Itinterrupt文件是用来存放中断函数的。我们将这三个文件复制下来粘贴到工程的User文件夹里。接着回到kill软件给user组里添加上这三个文件。最后需要一个宏定义我们可以在main函数里的头文件右键打开文件。接着我们滑到最下面8296行那里有一个条件编译的if语句。意思是如果你定义了use_stdperiph_driver这个字符串下面这个include conf.h语句才有效。所以我们需要复制一下这个字符串。打开魔术棒。在c或c里的define栏粘贴字符串这样才能包含标准外设库也就是库函数。当然下面的头文件路径include paths也不要忘了添加User和library的目录的路径。这样基于库函数的工程就建好了。然后我们再进行点灯操作。首先把刚才的基于寄存器的那三句删掉。然后我们开启使能时钟库函数里有一句函数可以开启。叫做rcc_apb2periPhclockcmd然后里面提示有两个参数一个是选择外设一个是选择新的状态。我们右键跳的函数定义上面有函数的简介和参数说明。将这个gpioc直接复制粘贴作为第一个参数。第二个参数咱们设置为enable使能。这样gpioc的外设时钟就配备好了。第二步是配置端口模式。我们需要用到gpio _Init这个函数。也是两个参数一个是选择哪个gpio一个是参数的结构体。第一个我们可以选择A到G。但是我们是PC13口的LED所以第一个参数就是gpi oC。第二个是Gpio_InitTypeDef的结构体。我们需要先定义一个结构体。结构体的名字可以随便起根据官方推荐我们可以起gpio_initstructure。然后我们把结构体的每个参数填上。复制粘贴这个名字用.来引出参数。分别有模式MODE端口PIN速度SPEED三种。我们右键转到模式MODE的定义。里面显示这个值可以是GPIOMode_TypeDef里都一个值。此时这是一个注释无法跳转。我们可以用ctrlF搜索一下这个定义的位置。find next之后我们可以看到这是一个枚举。而mode就是这里的其中一个值。我们选择out pp这一项复制这个就是通用推挽输出。然后在主函数里写上。接下来是第二个pin

更多文章