当前位置:首页 > 单片机 > 单片机
[导读]ST对STM8S系列都有提供固件库,而不同的版本自然存在一些不同,版本也一直从V1.0.0升级到目前的V1.1.1。环境: FWLIB V1.0.1版本,采用STM8SF103在使用GPIO库时,一个偶然发现stm8s_gpio.h中的宏定义是存在问题的。代

ST对STM8S系列都有提供固件库,而不同的版本自然存在一些不同,版本也一直从V1.0.0升级到目前的V1.1.1。

环境: FWLIB V1.0.1版本,采用STM8SF103

在使用GPIO库时,一个偶然发现stm8s_gpio.h中的宏定义是存在问题的。

代码定义如下:


******************************************************************************

*@filestm8s_gpio.h

*@briefThisfilecontainsallfunctionsprototypeandmacrosfortheGPIOperipheral.

*@authorSTMicroelectronics-MCDApplicationTeam

*@versionV1.0.1

*@date09/22/2008

******************************************************************************

/**

*@briefGPIOmodes

*

*Bitsdefinitions:

*-Bit7:0=INPUTmode

*1=OUTPUTmode

*1=PULL-UP(input)orPUSH-PULL(output)

*-Bit5:0=Noexternalinterrupt(input)orNoslopecontrol(output)

*1=Externalinterrupt(input)orSlowcontrolenabled(output)

*-Bit4:0=Lowlevel(output)

*1=Highlevel(outputpush-pull)orHI-Z(outputopen-drain)

*/

typedefenum

{

GPIO_MODE_IN_FL_NO_IT=(u8)0b00000000,/*!

GPIO_MODE_IN_PU_NO_IT=(u8)0b01000000,/*!

GPIO_MODE_IN_FL_IT=(u8)0b00100000,/*!

GPIO_MODE_IN_PU_IT=(u8)0b01100000,/*!

GPIO_MODE_OUT_OD_LOW_FAST=(u8)0b10000000,/*!

GPIO_MODE_OUT_PP_LOW_FAST=(u8)0b11000000,/*!

GPIO_MODE_OUT_OD_LOW_SLOW=(u8)0b10100000,/*!

GPIO_MODE_OUT_PP_LOW_SLOW=(u8)0b11100000,/*!

GPIO_MODE_OUT_OD_HIZ_FAST=(u8)0b10010000,/*!

GPIO_MODE_OUT_PP_HIGH_FAST=(u8)0b11010000,/*!

GPIO_MODE_OUT_OD_HIZ_SLOW=(u8)0b10110000,/*!

GPIO_MODE_OUT_PP_HIGH_SLOW=(u8)0b11110000/*!

}GPIO_Mode_TypeDef;

我在main.c中是直接这样用的 GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST); //将GPIOC所有IO口设置成推挽输出,10M速度。空闲IO口设置为输出低电平能降低不必要的功耗。


但是调试查看寄存器时发现 CR2寄存器全为0,不应该才对。手册上清晰的表明了为1为设置10M速度。

翻看stm8s_gpio.c中的GPIO_Init函数,有设置CR2寄存器,前提是根据GPIO_MODE掩码来进行判断,判断的根据就是 Bit 5。如下:


if((((u8)(GPIO_Mode))&(u8)0x20)!=(u8)0x00)/*InterruptorSlowslope*/

{

GPIOx->CR2|=GPIO_Pin;

}else/*NoexternalinterruptorNoslopecontrol*/

{

GPIOx->CR2&=(u8)(~(GPIO_Pin));

}



继续查看固件库,对于V1.1.1来说不存在这个问题,如:


******************************************************************************

*@filestm8s_gpio.h

*@briefThisfilecontainsallfunctionsprototypeandmacrosfortheGPIOperipheral.

*@authorSTMicroelectronics-MCDApplicationTeam

*@versionV1.1.1

*@date06/05/2009

******************************************************************************

/**

*@briefGPIOmodes

*

*Bitsdefinitions:

*-Bit7:0=INPUTmode

*1=OUTPUTmode

*1=PULL-UP(input)orPUSH-PULL(output)

*-Bit5:0=Noexternalinterrupt(input)orNoslopecontrol(output)

*1=Externalinterrupt(input)orSlowcontrolenabled(output)

*-Bit4:0=Lowlevel(output)

*1=Highlevel(outputpush-pull)orHI-Z(outputopen-drain)

*/

typedefenum

{

GPIO_MODE_IN_FL_NO_IT=(u8)0b00000000,/*!

GPIO_MODE_IN_PU_NO_IT=(u8)0b01000000,/*!

GPIO_MODE_IN_FL_IT=(u8)0b00100000,/*!

GPIO_MODE_IN_PU_IT=(u8)0b01100000,/*!

GPIO_MODE_OUT_OD_LOW_FAST=(u8)0b10100000,/*!

GPIO_MODE_OUT_PP_LOW_FAST=(u8)0b11100000,/*!

GPIO_MODE_OUT_OD_LOW_SLOW=(u8)0b10000000,/*!

GPIO_MODE_OUT_PP_LOW_SLOW=(u8)0b11000000,/*!

GPIO_MODE_OUT_OD_HIZ_FAST=(u8)0b10110000,/*!

GPIO_MODE_OUT_PP_HIGH_FAST=(u8)0b11110000,/*!

GPIO_MODE_OUT_OD_HIZ_SLOW=(u8)0b10010000,/*!

GPIO_MODE_OUT_PP_HIGH_SLOW=(u8)0b11010000/*!

}GPIO_Mode_TypeDef;


同样是GPIO_MODE_OUT_PP_HIGH_FAST,前者定义为 0b11010000,而后者则是 0b11110000。


后来从发行日志里也了解到,ST已经更正了这个错误。

V1.1.1 - 06/05/2009

@code
General
-------
+ Project template updated for both STVD and RIDE toolchains
+ Almost peripheral examples reviewed and validated with both Cosmic and Raisonance
compilers

library
-------
+ stm8s.h:
- __CONST definition added for Cosmic and Raisonance compilers
- TINY definition added for Cosmic and Raisonance compilers
- NEAR definition added for Raisonance compilers
- CAN registers declaration updated
- ADC1 registers declaration updated

+ stm8s_adc1.h:
- IS_ADC1_BUFFER_OK macro definition updated

+ stm8s_beep.c:
- BEEP_Init function updated
- BEEP->CSR |= BEEP_CSR_BEEPEN; removed from init function

+ stm8s_can.c/.h:
- Private variables declaration changed to volatile
- CAN_DeInit function updated
- CAN_Receive function updated
- CAN_FilterInit funtion updated
- CAN_Transmit function updated
- CAN_IT_TypeDef enum updated:
- CAN_IT_ERR and CAN_IT_LEC definition updated to avoid ANSI check
error with Cosmic

+ stm8s_clk.h:
- CLK_Peripheral_TypeDef enum updated:
- CLK_PERIPHERAL_UART1 definition updated and conditioned by the
device to use


+ stm8s_gpio.h:
- The GPIO_Mode_TypeDef enum element definition updated:
- GPIO_MODE_OUT_OD_LOW_FAST
- GPIO_MODE_OUT_PP_LOW_FAST
- GPIO_MODE_OUT_OD_LOW_SLOW
- GPIO_MODE_OUT_PP_LOW_SLOW
- GPIO_MODE_OUT_OD_HIZ_FAST
- GPIO_MODE_OUT_PP_HIGH_FAST
- GPIO_MODE_OUT_OD_HIZ_SLOW
- GPIO_MODE_OUT_PP_HIGH_SLOW

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

树莓派,(英语:Raspberry Pi,简写为RPi,别名为RasPi / RPI)是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布,用户可以用上运行...

关键字: 树莓派 gpio gpio编程

1-汇编编写的启动文件 startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界

关键字: STM32 固件库

学习目标 从无到有创建一个STM32的Keil工程 点亮板子上的一个LED 工程创建 下载固件库 待下载的固件库版本为 STM32F10x_StdPeriph_Lib_V3.5.0: 官方网址: https://www....

关键字: MDK STM32 固件库

串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以及它们如何帮助减少系...

关键字: gpio spi 串行外设接口

一、什么是GPIO? GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要C

关键字: gpio 通用io口

今天查看STM32资料时,对输出速度2M 10M 50M不是很了解,再加上移植ARF2496K程序到STM32时出现意外情况。一、STM8S端作为接收端和发送端时接收到的数据都正常。二、发送端(STM8S),接收端(ST...

关键字: io口 stm32f stm8s 输出速率

//**********************************************************************//************************************...

关键字: gpio STM32

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 S3C2410共有117个I...

关键字: ARM gpio 硬件介绍

STM8S单片机开发环境由三大部分组成,包括PC机上的开发软件(集成开发软件、驱动程序等)、调试&编程器ST-LINK、目标单片机电路板。如下图所示:1、PC机上开发软件PC机上的软件包括:ST-LINK驱动程序...

关键字: stm8s 单片机入门 开发环境

一直理解STM8S定时器有点问题,所以在做定时器时候,出现了好奇怪的问题.比如,今次在理解预装载值时候出现问题,导致动态调整预装载值均无法得到自己预期的效果.我们可以看参考手册定时器这块的描述,或者上网找一些文章

关键字: stm8s 定时器溢出 重装载
关闭
关闭