免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、不使用库函数的IO口操作Systick 部分内容属于NVIC控制部分,一共有4个寄存器SysTick_CTRL,0xE000E010-控制寄存器默认值:0x0000 0004SysTick_LOAD, 0xE000E014-重载寄存器默认值:0x0000 0000SysTick_VAL,0xE000E018-当前值寄存器默认值:0x0000 0000SysTick_CALIB,0xE000E01C-校准值寄存器默认值:0x0002328SysTick_CTRL 寄存器内有4个bit具有意义第0位:ENABLE,Systick 使能位(0:关闭Systick功能;1:开启Systick功能)第1位:TICKINT,Systick 中断使能位(0:关闭Systick中断;1:开启Systick中断)第2位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为系统时钟)第16位:COUNTFLAG,Systick计数比较标志IO口的位操作实现该部分代码实现对STM32各个IO口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。此部分仅仅对IO口进行输入输出读取和控制。代码如下: #define BITBAND(addr, bitnum) (addr & 0xF0000000)+0x2000000+(addr &0xFFFFF)5)+(bitnum2) #define MEM_ADDR(addr) *(volatile unsigned long *)(addr) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum) /IO口地址映射#define GPIOA_ODR_Addr (GPIOA_BASE+12) /0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) /0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) /0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) /0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) /0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) /0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) /0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) /0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) /0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) /0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) /0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) /0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) /0x40011A08 55 #define GPIOG_IDR_Addr (GPIOG_BASE+8) /0x40011E08 /IO口操作,只对单一的IO口! /确保n的值小于16! #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) /输出#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) /输入#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) /输出#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) /输入#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) /输出#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) /输入#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) /输出#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) /输入#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) /输出#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) /输入#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) /输出#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) /输入#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) /输出#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) /输入以上代码的实现得益于CM3的位带操作,具体的实现比较复杂,请参考第五章(87页92页)。有了上面的代码,我们就可以像51/AVR一样操作STM32的IO口了。比如,我要PORTA的第七个IO口输出1,则可以使用PAout(6)=1;既可以实现。我要判断PORTA的第15个位是否等于1,则可以使用if(PAin(14)=1);就可以了。另种方式:(基本上做出来了)我的STM32板子PA0和PA1接的LED灯,所以先映射这两位。 查看手册中的寄存器组起始地址(原文件名:地址.jpg)引用图片GPIOA是0x40010800 GPIOD是0x4001 1400端口输出数据寄存器(GPIOx_ODR)的偏移地址是0x0c 根据公式:别名区=ADDRESS=0x42000000+(0x0001080C*0x20)+(bitx*4);bitx:第x位 得到PA.0和PA.1的别名区地址 #definePA_Bit0(volatileunsignedlong*)(0x42210180) #definePA_Bit1(volatileunsignedlong*)(0x42210184) /42228180#define PD_Bit7 (volatileunsignedlong*)(0x4222819C)#define PD_Bit13 (volatileunsignedlong*)(0x422281CC)#define PD_Bit3 (volatileunsignedlong*)(0x4222818C)#define PD_Bit4 (volatileunsignedlong*)(0x42228190)接下来就可以对PA.0和PA.1进行位操作了 *PA_Bit0=1;/PA.0置1 *PA_Bit1=0;/PA.1置0 还可以读出这一位的值: while(1) *PA_Bit1=(*PA_Bit1); Delay(1000);/延时1秒 PA.1接的LED会闪烁。 由于对STM32的存储结构不了解,0x42000000不知道是从哪里来的。后来看到了一个PDF文档 (原文件名:存储.jpg)引用图片原来0x42000000是外设别名区域的地址。 我也是刚刚学习STM32,有错误的地方请大家指点。3、使用库函数,如下部分程序对IO的操作。while(1) /* Turn on LD1 */ GPIO_SetBits(GPIOD, GPIO_Pin_8); /* Insert delay */ Delay(0xAFFFF); /* Turn on LD2 and LD3 */ GPIO_SetBits(GPIOD, GPIO_Pin_9 | GPIO_Pin_10); /* Turn off LD1 */ GPIO_ResetBits(GPIOD, GPIO_Pin_8); /* Insert delay */ Delay(0xAFFFF); /* Turn on LD4 */ GPIO_SetBits(GPIOD, GPIO_Pin_11); /* Turn off LD2 and LD3 */ GPIO_ResetBits(GPIOD, GPIO_Pin_10 | GPIO_Pin_9); /* Insert delay */ Delay(0xAFFFF); /* Turn off LD4 */ GPIO_ResetBits(GPIOD, GPIO_Pin_11); 4、 IO1PIN=(IO1PIN&0xff00ffff)|(Reg_Code&0xff)IDR)的值。输出值照样设定,不过输出pin脚可能要硬件上上拉。此外,每个IO口均可以单独设置,比如,A口的高八位可以设置为下拉输入,低八位可以设置为推挽输出,用 PA8的电平状态控制PA0 的IO设置如下: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; / 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / 最高输出速率50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); / 选择A端口 初始化外设GP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉大学本科毕业论文设计格式要求规范
- 科技信息检索与论文写作作业
- 建筑工程项目论文六
- 临床试验远程监查与电子知情同意书的协同实施
- 产后出血预防与急救护理2026
- 函授汉语言文学毕业生自我鉴定5
- 当代学生普遍存在的问题及对策
- 05-宓咏-复旦大学信息中心主任-数据化管理与服务
- 皖西学院中文系本科毕业论文基本格式要求
- 北京科技大学本科生毕业设计(论文)治理标准
- 质控科、医务科视角下医院“十五五”发展规划方案
- 钛合金门协议合同范本
- 2025重庆文化艺术职业学院财务与资产管理处(审计处)合同制人员招聘4人考试笔试模拟试题及答案解析
- 2025年直播带货主播分成合同(2025年)
- 清华大学量化投资课件pdf
- 2026年南昌健康职业技术学院单招职业倾向性考试必刷测试卷完美版
- 2025年呼叫中心代表招聘面试参考题库及答案
- 2025年心理咨询师之心理咨询师三级技能押题练习试卷B卷附答案
- 贵州辅警面试题目及答案
- 仓储物流月工作总结
- 生产成本控制及核算数据表格模板
评论
0/150
提交评论