历史上的今天
返回首页

历史上的今天

今天是:2025年03月23日(星期日)

正在发生

2020年03月23日 | STM8S那些破事

2020-03-23 来源:eefocus

1、中断的使用   EXTI_SetExtIntSensitivity


外部中断控制寄存器 1 (EXTI_CR1)

void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)

{


    /* Check function parameters */

    assert_param(IS_EXTI_PORT_OK(Port));

    assert_param(IS_EXTI_SENSITIVITY_OK(SensitivityValue));


    /* Set external interrupt sensitivity */

    switch (Port)

    {

    case EXTI_PORT_GPIOA:

        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PAIS);

        EXTI->CR1 |= (uint8_t)(SensitivityValue);

        break;

    case EXTI_PORT_GPIOB:

        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PBIS);

        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 2);

        break;

    case EXTI_PORT_GPIOC:

        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PCIS); //0x30

        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 4);

        break;

    case EXTI_PORT_GPIOD:

        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PDIS);

        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 6);

        break;

    case EXTI_PORT_GPIOE:

        EXTI->CR2 &= (uint8_t)(~EXTI_CR2_PEIS);

        EXTI->CR2 |= (uint8_t)(SensitivityValue);

        break;

    default:

        break;

    }

}


#define IS_EXTI_SENSITIVITY_OK(SensitivityValue)

  (((SensitivityValue) == EXTI_SENSITIVITY_FALL_LOW) ||

   ((SensitivityValue) == EXTI_SENSITIVITY_RISE_ONLY) ||

   ((SensitivityValue) == EXTI_SENSITIVITY_FALL_ONLY) ||

   ((SensitivityValue) == EXTI_SENSITIVITY_RISE_FALL))


使用举例:


利用外部中断做按键检测


key 初始化


void Buttom_Init(void)

{

    GPIO_Init(GPIOB,Buttom2|Buttom1,GPIO_MODE_IN_PU_IT);

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);

}

中断向量指定的是Port_D  (注意每个port只有一个中断相应,触发后会跳入同一个中断函数)


中断响应 (stm8s_interruput.c)


__interrupt void EXTI_PORTB_IRQHandler(void)

{

  if((PB_IDR & 0x08)==0)  //PB4 FAIL

  {

    delay_ms(10);

    if((PB_IDR & 0x08)==0)

    {

      UART1_SendString("PB4_Downn",

                              sizeof("PB4_Downn"));

      //**需要中断处理的函数放这**//

    }

  }

}



读取Unique ID


1.读出ID号


 #define     ID_BaseAddress         (0x48CD)     //stm8s105  具体的看芯片手册


void GetUniqueID(unsigned char *p)

{

     unsigned char i;

     unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);    

     for(i=0;i!=12;i++){*p++=*pIDStart++;}

}


或者


u8 STM8S_ID[12];


void Get_STM8S_UniqueID(void)//Get STM8S Unique ID



    u8 i=0;


    for(i=0; i<12; i++) 


        STM8S_ID[i] = *(u8*)(0x48CD+i); 



1、可以使用CRC32算法将12位改为4位 


2、


#if defined (STM8S208) || defined (STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)

 #define FLASH_PROG_END_PHYSICAL_ADDRESS   ((uint32_t)0x027FFF) /*!< Program memory: end address */

 #define FLASH_PROG_BLOCKS_NUMBER          ((uint16_t)1024)     /*!< Program memory: total number of blocks */

 #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */

 #define FLASH_DATA_END_PHYSICAL_ADDRESS   ((uint32_t)0x0047FF) /*!< Data EEPROM memory: end address */

 #define FLASH_DATA_BLOCKS_NUMBER          ((uint16_t)16)       /*!< Data EEPROM memory: total number of blocks */

 #define FLASH_BLOCK_SIZE                  ((uint8_t)128)       /*!< Number of bytes in a block (common for Program and Data memories) */

#endif /* STM8S208, STM8S207, STM8AF52Ax, STM8AF62Ax */


 


 


 


 


gpio.c内有14个函数,其中读写操作9个、初始化操作3个、复用( Changes the mapping of the specified pin.---更改指定引脚映像),还有一个 Specifies the pins to be toggled.<切换指定引脚>。


一、函数


1、读写操作


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)  //读取输入I/O口的引脚值   ---0或1


uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)//读取输入I/O口状态值


uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) //读取输出I/O口的引脚值


uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)//读取输出I/O状态值


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//I/O口的引脚值置高


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//I/O口的引脚值置低


void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)/向I/O引脚写入数据


void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)//向I/O口写入数据


void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//锁定I/O口


2、初始化操作


void GPIO_DeInit(GPIO_TypeDef* GPIOx)


void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)//I/O口初始化


void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)//GPIO_InitStruct置默认值


3、复用操作


void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)


4、toggle bit


void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)


二、使用方法


1.读写操作


读写操作使用了GPIO_TypeDef、uint16_t定义参数,使用时需根据具体要求选择合适的参数。


2.初始化操作


使用该类函数之前需要获得GPIO_InitStryct结构体,并赋值。再调用该函数。


3、4方法同上。

推荐阅读

史海拾趣

Crowd_Supply__Inc.公司的发展小趣事

Crowd Supply Inc.深知社区是其发展的核心动力。因此,公司不仅在产品开发上积极吸纳社区意见,还在市场推广、技术支持等方面与社区紧密合作。通过举办线上线下的技术交流活动、设立社区奖励机制等方式,公司成功吸引并留住了一批忠实的社区成员。这些成员不仅为公司带来了稳定的用户基础,还通过口碑传播扩大了公司的品牌影响力。

Fong Ya Enterprise Co Ltd公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Crowd Supply Inc.也面临着诸多挑战。为了保持竞争优势,公司不断调整战略方向,加大在新技术领域的投入。例如,公司近期开始关注物联网和人工智能等前沿技术的应用,通过整合社区资源和技术优势,成功开发出了一系列具有市场潜力的新产品。

Fairchild Imaging公司的发展小趣事

Fairchild Imaging公司的历史可以追溯到1950年成立的Fairchild Camera & Instrument Company。这家公司自创立以来,就凭借其创新的技术和优质的产品,在许多重大的政府、国防项目中发挥了关键作用。随着公司业务的不断拓展,Fairchild Camera & Instrument Company逐渐将业务重心转向半导体和集成电路领域,并在此领域取得了显著成就。最终,Fairchild Imaging从Fairchild Camera & Instrument Company中独立出来,专注于高端成像技术的研发和应用。

ESPROS [Espros Photonics corp]公司的发展小趣事

随着技术的不断进步和市场需求的增长,ESPROS不断扩展其产品线。例如,公司发布了160 x 60像素的epc635 3D ToF传感器芯片,进一步完善了其3D ToF传感器产品线。此外,ESPROS还发布了320 x 240像素的epc660 3D ToF传感器,满足了市场对QVGA分辨率的需求。这些新产品的推出,不仅丰富了ESPROS的产品线,也进一步巩固了其在光电传感器领域的领先地位。

骏晔科技(DreamLNK)公司的发展小趣事

骏晔科技在无线通讯模块领域一直寻求创新。2019年,公司与硬之城达成战略合作,推出了高性能的FSK双向收发模块。这款模块采用了最新的FSK调制技术,极大地提高了数据传输的稳定性和效率。通过这一创新,骏晔科技在物联网设备通讯领域取得了显著的市场份额增长。

上海晶丰明源(BPS)公司的发展小趣事

随着公司的快速发展,晶丰明源于XXXX年成功通过科创板上市审核,正式登陆资本市场。这一重大事件不仅为公司带来了充裕的资金支持,也进一步提升了公司的品牌影响力和市场竞争力。借助资本市场的力量,晶丰明源得以加速研发进程、扩大生产规模,为公司的长远发展奠定了坚实基础。

问答坊 | AI 解惑

求助:请帮忙分析一下这个电路

请帮忙分析一下这个电路,IC2用哪个芯片比较合适。…

查看全部问答>

运算放大器应用设计的几个技巧

运算放大器在电路中发挥重要的作用,其应用已经延伸到汽车电子、通信、消费等各个领域,并将在支持未来技术方面扮演重要角色。在运算放大器的实际应用中,设计工程师经常遇到诸如选型、供电电路设计、偏置电路设计、PCB设计等方面的问题。在电子工 ...…

查看全部问答>

绝缘子带电检测仪(电场法)

高压输电线路绝缘子内缺陷带电检测装置专利号:ZL 02 2 40245.4华北电力大学(北京)网上宣传很多,唯有我们学校在生产,望慎重甄别,以防假冒!010-60120676 13601208165 okgod123@126.com 于老师    用电场法原理,整体水平达到国 ...…

查看全部问答>

特殊74系列芯片资料

我们平时的设计用得比较多的是74LS和74HC两个系列的芯片。这里为大家提供一些特殊的74系列芯片资料。 主要包括16个子系列,这些子系列虽然不常用的,但却是很有用的,如果用普通的LS和HC系列满足不了设计需要,不妨看一看这些系列的芯片,很有可能 ...…

查看全部问答>

华为模拟电路上下册。

很好的模拟电路实际使用学习资料。…

查看全部问答>

元旦散分!

祝大家新年快乐!…

查看全部问答>

Allegro 正负片的设置

我在ALLEGRO里边画了一个四层板,我的四层均为走线层,请问我把四层均设为正片,做出来的板子能够正常工作吗?…

查看全部问答>

负载电容选多大?

msp430f149低频振荡器支持32768KHz、6pF的晶体,但是32768负载电容6pF的晶振太难买了,所以打算xt1接12pF的晶振。 问题是149内部集成了6pF的等效电容,我是否需要在晶振两端对地并联两个12pF的电容?…

查看全部问答>

在最近有什么比赛吗,项目竞赛的那种

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 除电子设计大赛外,有哪些比赛啊!像什么杯之类的,有没有,大家介绍一下啊!聊一下参赛的一下经验啊!  …

查看全部问答>

地平面分割和跨分割信号线的问题

4层板 地平面分割后只在一点连接,两区之间的信号线怎么不跨分割呢?比如单片机出来的脉冲信号有送去给模拟电路的时候。 而且单片机下面的地要怎么分割,除了内置ADC相关的引脚,其它区域都铺数字地吗?类似的,像DAC和ADC要跨分割沟来放可以吗? ...…

查看全部问答>