STM32固件库移植_MAT.doc_第1页
STM32固件库移植_MAT.doc_第2页
STM32固件库移植_MAT.doc_第3页
STM32固件库移植_MAT.doc_第4页
STM32固件库移植_MAT.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0814_lesson2 笔记1:栈指针的概念Stack_Size EQU 0x000002002:堆的概念Heap_Size EQU 0x000000003:DCD定义4个内存地址(03,47)4:设置进入mian.c5:新建main.c注意事项:0817 固件库移植1:错误10817 建立STM32库函数工程模板建立“工程模板练习”:stm32库、main空文件夹、project空文件夹、output空文件夹新建工程分四个组注意:新建的项目名存放在“project”下,选择芯片,不加载默认启动文件。添加组1:CM3(ARM内核访问定义):STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupportcore_cm3.c添加组2:STlib(ST编写的外设库)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrc下的需要的部分添加组3:system内容是ST工程模板中的“.c”文件(STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template)添加组4:建立自己的main.c(放在main空文件夹下),在添加一个启动的.s文件(STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm的startup_stm32f10x_md(中等容量,按照所使用的选择相应的)在添加完组之前千万不要点击“编译”指定输出路径:到output文件夹 ,避免主目录下的文件杂乱。建立4组添加相应文件,并确认输出文件路径后可以编译。移植后的错误1:.STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrcmisc.c(24): error: #5: cannot open source input file misc.h: No such file or directory找不到misc.h文件 解决:指定出其路径错误2:.STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrcmisc.c(99): warning: #223-D: function assert_param declared implicitly没有发现assert_param (参数裁决)的存在。(STM32F10X_MD USE_STDPERIPH_DRIVER)错误3:e:Program FilesMDK_ARMARMINCSTSTM32F10xstm32f10x_type.h(23): error: #256: invalid redeclaration of type name s32 (declared at line 470 of e:Program FilesMDK_ARMARMINCSTSTM32F10xstm32f10x.h)表示安装的MDK编译器本身的自带的ST_M3的库与当前所要使用的3.5版本的库冲突,解决要加3个制定的地址:A:.STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupportB:.STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xC:.STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template错误4:.STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: Please select first the target STM32F10x device used in your application (in stm32f10x.h file)错误指定处:#if !defined (STM32F10X_LD) & !defined (STM32F10X_LD_VL) & !defined (STM32F10X_MD) & !defined (STM32F10X_MD_VL) & !defined (STM32F10X_HD) & !defined (STM32F10X_HD_VL) & !defined (STM32F10X_XL) & !defined (STM32F10X_CL) #error Please select first the target STM32F10x device used in your application (in stm32f10x.h file)#endif解决:添加STM32F10X_MD因为使用的是中等容量(ROM)的芯片编译后直至出现0-0;compiling stm32f10x_piling system_stm32f10x.c.linking.Program Size: Code=848 RO-data=268 RW-data=20 ZI-data=1636 12864移植练习.axf - 0 Error(s), 0 Warning(s)到此一个完整库函数应用工程的空模板建成!在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:Program Size: Code=6320 RO-data=4864 RW-data=44 ZI-data=1636代表的意思:Code :是程序中代码所占字节大小RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)ZI-Data :程序中未初始化的变量大小 (个人理解 :Zero Initialize)ROM(Flash) size = Code+RO-data+RW-data;RAM size = RW-data+ZI-data可以通过.map查看占用的flash和ram大小Program Size: Code=848 RO-data=268 RW-data=20 ZI-data=1636 Total RO Size (Code + RO Data) 1116 ( 1.09kB) Total RW Size (RW Data + ZI Data) 1656 ( 1.62kB) Total ROM Size (Code + RO Data + RW Data) 1136 ( 1.11kB)1:LED工程在一个基础的库函数孔模板上添加main.c的代码:1:添加头文件#includestm32f10x_conf.h(打开了解)2:初始化GPIO(和0814_lesson2讲的操作一样,不同点在与这次试用的是库函数调用的方式操作寄存器的),依照STM32固件库使用手册的中文翻译版,void LED_init()GPIO_InitTypeDef IO; /变量的形式 IO. *IO是指针的形式 IO-!/RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph,FunctionalState NewState); /cmd:开关/ 4h1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);/开A口时钟/ 20h1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE);/开D口时钟IO.GPIO_Pin=GPIO_Pin_8;IO.GPIO_Speed=GPIO_Speed_50MHz;IO.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&IO); /使用这个函数是需要初始化结构体成员/GPIO_Init(GPIOA, GPIO_InitTypeDef* GPIO_InitStruct);/A口初始化IO.GPIO_Pin=GPIO_Pin_2;IO.GPIO_Speed=GPIO_Speed_50MHz;IO.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,&IO);3. 封装LED子函数void LED1_ON()GPIO_ResetBits(GPIOA,GPIO_Pin_8);void LED1_OFF()GPIO_SetBits(GPIOA,GPIO_Pin_8);void LED2_ON()GPIO_ResetBits(GPIOD,GPIO_Pin_2);void LED2_OFF()GPIO_SetBits(GPIOD,GPIO_Pin_2);4调用封装函数即可void delay(u32 x)while(x-);int main()LED_init();while(1)LED1_ON();LED2_ON();delay(1000000);LED1_OFF();LED2_OFF();delay(1000000);到此一个完整的LED库函数版本的STM32程序完成!接下来需要像51一样把LED的“LED.c”、“LED.h”做成文件夹的形式方便以后试用。1:现在工程的主目录下新建“LED空文件夹”把做好的“LED.c”、“LED.h”放进去,在以组的形式添加到工程目录下(在目录下新建LED组,再把文件夹下的LED.c加进来),同时要把LED.h的路径加载到如下图所示:往后的每个使用的“.h”文件都要添加进来!警告1:.LEDLED.c(37): warning: #1-D: last line of file ends without a newline需要在代码的最后一行加回车换行警告2:.LEDLED.h(10): warning: #1295-D: Deprecated declaration LED2_OFF - give arg types需要在没有形参的函数中假如void的标志(仅在.h文件中)2::12864的移植 BSP:板级支持包1:添加原先51的12864.c和12864.h到主目录下的12864文件夹中2:设置软件包含12864.h头文件的位置编译解决出现的问题,所谓的移植就是指解决编译产生的问题问题:1:.1286412864.h(4): error: #5: cannot open source input file reg51.h: No such file or directory解决:#includestm32f10x_conf.h /替代#include2:.1286412864.h(9): error: #20: identifier sbit is undefinedSbit、P3等没有定义。解决:/sbit RS_CS=P35; /- 4pin/sbit RW_SID=P36; /- 5pin/sbit E_CLK=P37; /- 6pin/用stm32开发板的PA13(CS)、PA14(RW)、PA15(EN)替换#define RS_CS_0 GPIO_ResetBits(GPIOA,GPIO_Pin_8); /从新定义管脚!#define RS_CS_1 GPIO_SetBits(GPIOA,GPIO_Pin_8);#define RW_SID_0 GPIO_ResetBits(GPIOA,GPIO_Pin_9);#define RW_SID_1 GPIO_SetBits(GPIOA,GPIO_Pin_9);#define E_CLK_0 GPIO_ResetBits(GPIOA,GPIO_Pin_10);#define E_CLK_1 GPIO_SetBits(GPIOA,GPIO_Pin_10);同时也初始化相应管脚(开时钟、设置IO状态)所以要有IO口的初始化函数:包含在12864

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论