STM32调试报告.docx
STM32调试报告 1、头文件 初始化相应的函数,同时最好将相应的引脚进行宏定义,方便后面写主函数时方面。 2、 c函数 c函数要将相应的头文件包括进去,同时初始化相应头文件里面的自己定义的函数。对相应的函数进行编写,包括引入结构体,时钟初始化,选择相应的引脚、引脚输入输出模式、如果是输出需要设置输出速度。 3、 main函数 4、 GPIO端口七个寄存器 两个32位配置寄存器GPIO_CRL AND GPIO_CRH. TWO 32bit dateregister GPIO_IDR AND DPIO_ODR 一个32位置位/复位寄存器GPIO_BSRR 一个16位复位寄存器GPIO_BRR 一个32位锁存寄存器GPIO_LCKR GPIO_CRL寄存器的复位值为 0X4444 4444,从图 6.1.4 可以看到,复位值其实就是配置端口为浮空 输入模式。从上图还可以得出:STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。 每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几 个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M 速率)。 在固件库中操作 IDR 寄存器读取 IO 端口数据是通过 GPIO_ReadInputDataBit 函数实现的: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 比如我要读 GPIOA.5 的电平状态,那么方法是: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5); 返回值是 1(Bit_SET)或者 0(Bit_RESET); 在固件库中设置 ODR 寄存器的值来控制 IO 口的输出状态是通过函数 GPIO_Write 来实现 的: void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); GPIO_WriteBit(GPIOR,GPIO_Pin_0,(BitAction)(1));//LED控制 位操作使用ODR AND IDP寄存器 在使用寄存器BSRR 和寄存器BRR时,使用规则总结如下: 1、置GPIOD->BSRR低16位的某位为’1’,则对应的I/O端口置’1’;而置GPIOD->BSRR低16位的某位为’0’,则对应的I/O端口不变。 2、置GPIOD->BSRR高16位的某位为’1’,则对应的I/O端口置’0’;而置GPIOD->BSRR高16位的某位为’0’,则对应的I/O端口不变。 3、置GPIOD->BRR低16位的某位为’1’,则对应的I/O端口置’0’;而置GPIOD->BRR低16位的某位为’0’,则对应的I/O端口不变。 使用场合举例如下: 1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句: GPIOD->BSRR = 0x0C21;// 使用规则1 2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句: GPIOD->BRR = 0xC00A;// 使用规则三 3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句: GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二 实例3 假设需要对 GPIOA_Pin_6 输出高电平。采用改写 ODR 寄存器的方式时,使用“读-改-写”操作,代码如下: uint32_t temp; temp = GPIOA->ODR; temp = temp | GPIO_Pin_4; GPIOA->ODR = temp; 而使用改写 BSRR 寄存器时,仅需要使用如下语句: GPIOA->BSRR = GPIO_Pin_6; 在修改 ODR 时,为了确保对端口 6 的修改不会影响到其他端口的输出,需要对端口的原始数据进行保存,之后再对端口 6 的值进行修改,最后再写入寄存器(即读-改-写形式改变位的状态)。而对 BSRR 的操作,是写 1 有效,写 0 不改变原状态,因此可以对端口 6 置 1,其他位保持为 0。BSRR 为 1 的位,会修改相应的 ODR 位,从而控制输出电平。 因此,在设置单个 IO 口输出时,使用 BSRR 进行操作会更加方便。 在固件库中操作 IDR 寄存器 STM32调试报告主要涉及了STM32微控制器在GPIO(通用输入输出)方面的配置和操作,这是嵌入式系统开发中的基础部分。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,广泛应用在各种嵌入式系统设计中。 调试报告提到了初始化头文件的重要性。在STM32的编程中,通常会包含如`stm32fxx.h`或`stm32fxxx_hal_gpio.h`这样的头文件,它们包含了STM32的外设接口定义和函数原型。同时,为了简化代码,还会定义特定引脚的宏,如`GPIO_Pin_5`,这使得在编写主函数时能更清晰地处理引脚配置。 接着,报告强调了C函数的编写,包括包含必要的头文件并初始化自定义函数。这些函数通常包括时钟初始化、GPIO配置等。例如,时钟初始化函数可能会调用`HAL_RCC_OscConfig()`和`HAL_RCC_ClockConfig()`来设置系统时钟频率,而GPIO配置则涉及选择引脚、设定输入/输出模式以及输出速度。 在主函数`main()`中,通常会调用这些预定义的初始化函数来设置GPIO端口。STM32的GPIO端口有7个寄存器,包括两个32位配置寄存器`GPIO_CRL`和`GPIO_CRH`,用于设置低8位和高8位的IO端口模式;两个32位数据寄存器`GPIO_IDR`和`GPIO_ODR`,用于读取和设置GPIO的输入/输出数据;一个32位置位/复位寄存器`GPIO_BSRR`,一个16位复位寄存器`GPIO_BRR`,以及一个32位锁存寄存器`GPIO_LCKR`。这些寄存器的使用对于精确控制GPIO的状态至关重要。 在GPIO_CRL寄存器中,复位值0X4444 4444表示所有引脚配置为浮空输入模式。配置模式如0X0表示模拟输入,0X3表示推挽输出,0X8表示上下拉输入,0XB表示复用输出。了解这些模式有助于快速设置引脚功能。 在固件库中,读取GPIO输入数据可使用`GPIO_ReadInputDataBit()`函数,而设置GPIO输出状态则通过`GPIO_Write()`或`GPIO_WriteBit()`。例如,读取GPIOA的第5位电平状态,可以调用`GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5)`。控制GPIO输出状态时,`GPIO_WriteBit()`允许位操作,如`GPIO_WriteBit(GPIOR, GPIO_Pin_0, (BitAction)(1))`来控制LED。 对于`GPIO_BSRR`和`GPIO_BRR`寄存器,它们提供了高效设置多个GPIO状态的方法。如设置D0、D5、D10、D11为高,D1、D3、D14、D15为低,可以通过一行代码完成,避免了逐个设置的繁琐。`GPIO_BSRR`的低16位用于置位,高16位用于复位,而`GPIO_BRR`只用于复位。 在实际应用中,例如要使GPIOA的第6位输出高电平,通过`GPIOA->BSRR = GPIO_Pin_6;`可以直接完成,而无需像修改`GPIOA->ODR`那样先读取、再修改、最后写回。这是因为`BSRR`寄存器的写1有效特性,能够高效且精确地设置单个GPIO位。 总结来说,STM32的GPIO调试涉及到初始化、模式配置、读写操作以及高效控制多个GPIO状态的技巧。理解并熟练运用这些知识点对于STM32的程序开发至关重要。





剩余27页未读,继续阅读
























- 粉丝: 276
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 关于智能化技术在电气工程自动化控制中的运用研究.docx
- 螺旋埋弧焊管焊缝形状控制与优化工艺数据库的开发的开题报告.docx
- 诚信网站销售话术.doc
- 病历书写之二(四十五)MicrosoftPowerPoint演示文稿.ppt
- 基于Web的物流管理系统的设计与开发.doc
- 启明星辰天清WEB应用安全网关测评方案.doc
- 科技档案管理信息化应用中存在的问题和解决办法.docx
- DB23_T_3182_2022_饲用燕麦与紫花苜蓿间作技术规程.pdf
- [医学]健康教育课件2jsp.ppt
- 全国计算机二级机试题模拟题10套(1).docx
- 实验7面向对象编程.doc
- 南开大学2021年9月《移动电子商务》作业考核试题及答案参考17.docx
- 计算机数据库安全管理技术的分析探讨(1).docx
- 现代建筑工程的信息化管理问题探讨.docx
- 物联网技术的六氟化硫分解产物测试装置.docx
- 单片机原理与接口技术考试知识点.doc



评论0