keil5安装
1.Keil C51,安装包大小30M左右,包括C51 的编译器和uVision 4集成开发环境。
2.Keil MDK-ARM,安装包几百兆,包括ARM的编译器和uVision 4集成开发环境。
keil arm和51一起安装需要做点工作,可以参考这里点击打开链接,我简单讲一下,如下图
如果装了arm或51的keil就会有arm文件夹或者c51文件夹,在此基础上要再装一个,就直接把相应的那个文件夹复制到这里来,文件夹可以上网找,或者装了再复制出来,这样就有了arm和51两个文件夹,接下只要改一下TOOLS文件就行了,就是把相应加进来的文件夹的配置填到TOOLS里去,注意path要根据个人情况填安装的路径,具体的内容看 链接。
我的单片机属于stm32f1,安装软件之后得安装相应的芯片型号的pack,一般打开一个工程就会弹出pack manager来自动更新下载的,但一般没会下载失败,此时只能手动去下载,http://www.keil.com/dd2/Pack/#/eula-container 进入链接 选择自己型号对应的包下载后直接双击安装即可。这样打开软件 project->select device for target应该就能看到刚才安装的pack了,选择对应型号即可编译,破解不赘述。但是打开后仍报错:“Loading PDSC Debug Description Failed”,解决参考:https://blog.csdn.net/qingwufeiyang12346/article/details/79773574
驱动安装:
win10 ch341的驱动安装失败,重新下了几个还是不行,看网上说关掉数字签名,没办法,只能试试了,过程还挺麻烦,得用其他设备登陆到所给网址获得一串贼长的密码输入才能关掉数字签名,再安装还是失败。。。看一个人说脸上单片机再安装试试,居然就成了。
新建工程
我用的是正点原子的mini板,所以也是按着它的教程来学,新建工程自然也按照它的规范来。
首先新建一个工程的文件夹,名字随便。在这个文件夹内新建文件夹如下
core是存放核心文件和启动文件 hardware放硬件有关驱动 obj放生成的目标和过程文件 fwlib就是stm32的库文件,system放的是我买的单片机商家给的函数,比如延时什么的,我觉得暂时可以不用,user下自动生成的三个文件夹是编译生成的中间文件 可删掉其中...it 是中断有关文件,system_stm32f10x是时钟初始化,stm32f10x类似reg51.h, 是所有stm32库都会引用的文件,里面有所有的寄存器定义 conf就是库配置文件,main函数也放在user这
大致看一下里面有什么
core
fwlib(固件库STM32F10x_StdPeriph_Lib 可以从网上下过来再找到这两个文件夹复制过来)
user
到这里文件的准备工作就好了,再简单说下新建工程
像原先新建51的工程时一样点,选择型号的时候注意如下,根据自己的单片机选
结束后把刚才新建的这些文件慢慢加到工程里去
待会点亮led的驱动部分就放到hardware里,main就加到user去,还有三个需要注意的
第一点 在define那填 STM32F10X_HD,USE_STDPERIPH_DRIVER 前面一句是容量还是什么的,反正要根据单片机来,后面一句看下面
这是stm32f10x.h最后几行的内容,而stm32f10x_conf.h中包含了所有头文件,也就是说没后面那句define的话就得手动把需要的库文件加进去
第二点 #include path那要填所有头文件所在的地址,必须是直接的,比如在...hardware\led下有led的头文件,那就必须填hardware\led 不能填hardware
第三点,改一下生成目标文件的地址 三点如下图
这些设置结束后,把这个工程文件夹单独保存下来,毕竟这个过程还是挺麻烦的,以后直接复制这个文件夹,在修改下工程名字,加入适当硬件驱动和main函数就行了
下面讲点亮led
点亮led就是控制io口,stm32的io口显然不像51那么简单,先来宏观的讲一讲,stm32有A-G七组io口,每组16个io口,也就是说理论上最多能连出112个io口,每组都由七个寄存器控制,七个寄存器特定的位对应特定的io口的相应功能,比如CRL和CRH两个寄存器,每个io口有对应四个位控制其输入输出的模式和速度,每个寄存器32位,则这两个寄存器刚好控制16个io口,即一组,每组都有相应的CRL和CRH
复位时为浮空输入模式
目前是用库函数,所以寄存器先不细讲了,库函数设置两个io口如下
main如下
#include "led.h" void delayms(u16 time) { u16 i=0; while(time--) { i=8000; //不怎么准的。。。查了一下是默认72mhz的系统频率,网上说是这里12000,但是我用的时候感觉大了不少,8000还靠谱一点,先放着吧。。。 while(i--) ; } } int main() { LED_Init(); while(1) { GPIO_SetBits(GPIOA,GPIO_Pin_8);//PA8置高 GPIO_ResetBits(GPIOD,GPIO_Pin_2);//PB2置低 delayms(300); GPIO_ResetBits(GPIOA,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_2); delayms(300); } return 0; }
最后烧录:
我用的flymcu,正常安装驱动应该能检测到com口了,改下下面这个设置,再点击开始编程