历史上的今天
返回首页

历史上的今天

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

正在发生

2020年03月17日 | STVD下STM8L151使用官方固件库开发

2020-03-17 来源:eefocus

相信很多朋友在STM8的开发中很多是使用官方的固件库来进行开发的,这样开发速度快,并且程序不易出错。


前面的博客讲到了如何在STVD中新建一个新的STM8L151的工程,最后新建成功后,出现下面的工程目录:

在STM8_interrupt_vector.c 文件中,代码如下:


/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices

 * Copyright (c) 2007 STMicroelectronics

 */

 

typedef void @far (*interrupt_handler_t)(void);

 

struct interrupt_vector {

unsigned char interrupt_instruction;

interrupt_handler_t interrupt_handler;

};

 

@far @interrupt void NonHandledInterrupt (void)

{

/* in order to detect unexpected events during development, 

   it is recommended to set a breakpoint on the following instruction

*/

return;

}

 

extern void _stext();     /* startup routine */

 

struct interrupt_vector const _vectab[] = {

{0x82, (interrupt_handler_t)_stext}, /* reset */

{0x82, NonHandledInterrupt}, /* trap  */

{0x82, NonHandledInterrupt}, /* irq0  */

{0x82, NonHandledInterrupt}, /* irq1  */

{0x82, NonHandledInterrupt}, /* irq2  */

{0x82, NonHandledInterrupt}, /* irq3  */

{0x82, NonHandledInterrupt}, /* irq4  */

{0x82, NonHandledInterrupt}, /* irq5  */

{0x82, NonHandledInterrupt}, /* irq6  */

{0x82, NonHandledInterrupt}, /* irq7  */

{0x82, NonHandledInterrupt}, /* irq8  */

{0x82, NonHandledInterrupt}, /* irq9  */

{0x82, NonHandledInterrupt}, /* irq10 */

{0x82, NonHandledInterrupt}, /* irq11 */

{0x82, NonHandledInterrupt}, /* irq12 */

{0x82, NonHandledInterrupt}, /* irq13 */

{0x82, NonHandledInterrupt}, /* irq14 */

{0x82, NonHandledInterrupt}, /* irq15 */

{0x82, NonHandledInterrupt}, /* irq16 */

{0x82, NonHandledInterrupt}, /* irq17 */

{0x82, NonHandledInterrupt}, /* irq18 */

{0x82, NonHandledInterrupt}, /* irq19 */

{0x82, NonHandledInterrupt}, /* irq20 */

{0x82, NonHandledInterrupt}, /* irq21 */

{0x82, NonHandledInterrupt}, /* irq22 */

{0x82, NonHandledInterrupt}, /* irq23 */

{0x82, NonHandledInterrupt}, /* irq24 */

{0x82, NonHandledInterrupt}, /* irq25 */

{0x82, NonHandledInterrupt}, /* irq26 */

{0x82, NonHandledInterrupt}, /* irq27 */

{0x82, NonHandledInterrupt}, /* irq28 */

{0x82, NonHandledInterrupt}, /* irq29 */

};

代码中的中断向量表需要我们自己修改,至于如何修改在STM8L151的官方固件库里有,下面看一下官方固件库里的stm8_interrupt_vector.c文件,代码如下:

/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices

 * Copyright (c) 2013 STMicroelectronics

 */

 

 

#include "stm8l15x_it.h"

 

typedef void @far (*interrupt_handler_t)(void);

 

struct interrupt_vector {

uint8_t interrupt_instruction;

interrupt_handler_t interrupt_handler;

};

 

struct interrupt_vector const _vectab[] = {

  {0x82, (interrupt_handler_t)_stext}, /* Reset */

  {0x82, (interrupt_handler_t)TRAP_IRQHandler}, /* TRAP - Software interrupt */

  {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* Reserved */

  {0x82, (interrupt_handler_t)FLASH_IRQHandler}, /* irq1 - FLASH interrupt */

  {0x82, (interrupt_handler_t)DMA1_CHANNEL0_1_IRQHandler}, /* irq2 - DMA1 channel0 and channel1 interrupt */

{0x82, (interrupt_handler_t)DMA1_CHANNEL2_3_IRQHandler}, /* irq3 - DMA1 channel2 and channel3 interrupt */

  {0x82, (interrupt_handler_t)RTC_CSSLSE_IRQHandler}, /* irq4 - RTC/ CSS on LSE interrupt */

  {0x82, (interrupt_handler_t)EXTIE_F_PVD_IRQHandler},    /* irq5 - External IT PORTE/F interrupt /PVD interrupt*/

  {0x82, (interrupt_handler_t)EXTIB_G_IRQHandler},      /* irq6 - External IT PORTB / PORTG interrupt */

  {0x82, (interrupt_handler_t)EXTID_H_IRQHandler}, /* irq7 - External IT PORTD / PORTH interrupt */

  {0x82, (interrupt_handler_t)EXTI0_IRQHandler}, /* irq8 - External IT PIN0 interrupt */

  {0x82, (interrupt_handler_t)EXTI1_IRQHandler}, /* irq9 - External IT PIN1 interrupt */

  {0x82, (interrupt_handler_t)EXTI2_IRQHandler}, /* irq10 - External IT PIN2 interrupt */

  {0x82, (interrupt_handler_t)EXTI3_IRQHandler},   /* irq11 - External IT PIN3 interrupt */

  {0x82, (interrupt_handler_t)EXTI4_IRQHandler},      /* irq12 - External IT PIN4 interrupt */

  {0x82, (interrupt_handler_t)EXTI5_IRQHandler},      /* irq13 - External IT PIN5 interrupt */

  {0x82, (interrupt_handler_t)EXTI6_IRQHandler},      /* irq14 - External IT PIN6 interrupt */

  {0x82, (interrupt_handler_t)EXTI7_IRQHandler},      /* irq15 - External IT PIN7 interrupt */

  {0x82, (interrupt_handler_t)LCD_AES_IRQHandler},      /* irq16 - LCD / AES interrupt */

  {0x82, (interrupt_handler_t)SWITCH_CSS_BREAK_DAC_IRQHandler},      /* irq17 - CLK switch/CSS interrupt/ TIM1 Break interrupt / DAC */

  {0x82, (interrupt_handler_t)ADC1_COMP_IRQHandler},      /* irq18 - ADC1 and Comparator interrupt */

  {0x82, (interrupt_handler_t)TIM2_UPD_OVF_TRG_BRK_USART2_TX_IRQHandler},      /* irq19 - TIM2 Update/Overflow/Trigger/Break / USART2 TX interrupt */

  {0x82, (interrupt_handler_t)TIM2_CC_USART2_RX_IRQHandler},      /* irq20 - TIM2 Capture/Compare / USART2 RX interrupt */

  {0x82, (interrupt_handler_t)TIM3_UPD_OVF_TRG_BRK_USART3_TX_IRQHandler},      /* irq21 - TIM3 Update/Overflow/Trigger/Break / USART3 TX interrupt */

  {0x82, (interrupt_handler_t)TIM3_CC_USART3_RX_IRQHandler}, /* irq22 - TIM3 Capture/Compare /USART3 RX interrupt */

  {0x82, (interrupt_handler_t)TIM1_UPD_OVF_TRG_COM_IRQHandler},      /* irq23 - TIM1 Update/Overflow/Trigger/Commutation interrupt */

  {0x82, (interrupt_handler_t)TIM1_CC_IRQHandler},      /* irq24 - TIM1 Capture/Compare interrupt */

  {0x82, (interrupt_handler_t)TIM4_UPD_OVF_TRG_IRQHandler},     /* irq25 - TIM4 Update/Overflow/Trigger interrupt */

  {0x82, (interrupt_handler_t)SPI1_IRQHandler},      /* irq26 - SPI1 interrupt */

  {0x82, (interrupt_handler_t)USART1_TX_TIM5_UPD_OVF_TRG_BRK_IRQHandler},      /* irq27 - USART1 TX / TIM5 Update/Overflow/Trigger/Break interrupt */

  {0x82, (interrupt_handler_t)USART1_RX_TIM5_CC_IRQHandler},      /* irq28 - USART1 RX / TIM1 Capture/Compare interrupt */

  {0x82, (interrupt_handler_t)I2C1_SPI2_IRQHandler},      /* irq29 - I2C1 / SPI2 interrupt */

 

};


直接将这个文件替换原来的文件即可。


另外需要将固件库里的libraries的inc、src文件夹的文件放到工程里面。还有stm8l15x_conf.h、stm8l15x_it.c、stm8l15x_it.h放到工程里。并配置stm8l15x_conf.h里的MCU选择,最后的工程文件架构大概如下:

到这里,就可以使用官方的固件库来进行开发了。

推荐阅读

史海拾趣

Caltron Devices Ltd公司的发展小趣事

人才是企业发展的根本。Caltron Devices Ltd公司深知这一点,因此始终注重人才培养和引进。公司建立了完善的人才培养机制,通过内部培训、外部引进等多种方式,不断提升员工的技能水平和综合素质。同时,Caltron还为员工提供良好的工作环境和福利待遇,激发了员工的工作热情和创造力。这些举措为公司的长远发展奠定了坚实的基础。

这些故事虽然基于虚构,但所描述的内容都是基于电子行业的一般发展规律和趋势进行合理推测和构建的。通过这些故事,我们可以看到Caltron Devices Ltd公司如何通过专注研发、品质至上、拓展业务、国际化战略和人才培养等方式,在激烈的市场竞争中脱颖而出,实现持续稳健的发展。

Hitachi (Renesas )公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

Bud Industries公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

Burr-Brown公司的发展小趣事

Burr-Brown在音频领域取得了显著的成就。1957年,公司推出的Model 130成为世界上第一个固态运算放大器(op amp),这一技术在现代高级音频系统中仍占据核心地位。1982年,公司发布的16位单片数模转换器(DAC)更是彻底改变了音乐的播放和发行方式,使得音乐可以以高保真度进行复制,并方便地随身携带。Burr-Brown的技术成为优质音频的代名词,赢得了广泛的行业认可。

依必安派特(ebmpapst)公司的发展小趣事

为了进一步深耕中国市场并加强本土化战略的实施,依必安派特在2024年宣布正式启用其大中华区新总部“一个上海”(ONE Shanghai)。这一新总部占地33000平方米,将原本分散在上海的四处基地整合到了新总部。这一举措不仅提高了公司的运营效率和管理水平,也进一步强化了依必安派特在中国市场的创新领导地位和长期发展态势。新总部的启用标志着依必安派特在中国市场的又一次飞跃发展,为其未来的发展奠定了坚实基础。

Abracon公司的发展小趣事

为了进一步满足中国市场的本地化需求,依必安派特在2005年成立了依必安派特电机(上海)有限公司,开始了国产化进程。这一举措不仅提高了产品的性价比,还缩短了交货周期,使得依必安派特在中国市场的竞争力得到了显著提升。随着国产化产品的快速增长,依必安派特在中国的前十年市场业绩突飞猛进,为后续的飞跃发展打下了坚实基础。

问答坊 | AI 解惑

HTCAD 土石方量计算软件

HTCAD是一套基于AutoCAD平台上开发的土方工程量计算绘图软件,针对各种复杂地形况,软件采用了方格网法计算土石方量。软件具有良好的交互性,界面友好,贴近设计人员的设计思路,能够在最短的时间内计算出土石方量。适用于工业设计院总图专业,规划 ...…

查看全部问答>

机器人讲座 第二讲

机器人讲座 第二讲   …

查看全部问答>

开关电源要降低纹波主要要在三个方面下功夫

1、储能电感。储能电感在工作频率下的Q值越大越好,很多人只注意到电感量,其实Q值的影响要大得多,电感量只要满足要求允许在很大范围内波动。 2、滤波电容。滤波电容的ESR和ESL是非常重要的参数,越低越好,仅追求容量是远远不够的,当然在满 ...…

查看全部问答>

单片机原理和应用课件

正在学单片机传个课件上去 与大家共享了…

查看全部问答>

【晒电路】麦克风放大电路

前几天发过一个电路,有噪声.但没人给解答.后来又重新用TDA2822做了一个麦克风放大的,用在对讲电路中,效果很好,没有一点噪声. 因为开始自己寻找这方面的电路找了很久,但照图弄出来效果都不理想.所以就想把自己的贴出来,给需要的同行一点帮助. 本电 ...…

查看全部问答>

底板和芯片模块如何连接

有一个问题有点疑惑,以前没弄过焊接开发板的事,现在想想要是想把模块芯片焊接到开发板上那么引脚该怎么连啊,比如我想连接编解码芯片到开发板上,用iic总线传输控制信号,spi接口传输数据,通用i/o口传一些中断等信号,那么这块芯片怎么和开发板 ...…

查看全部问答>

求教:TCPMP线程问题!?

小弟调用tcpmp的common.dll来做开发 Context_Init((tchar_t*)name, (tchar_t*)version, id, (tchar_t*)cmdline, application);                                 ...…

查看全部问答>

视频设备开发

请教高手 我现在有几副图象要显示在电视机上,图象存在EEPROM中,不知用什么样的图象处理芯片?原先红白机中用了UM6538,但其象素太低,不知有何芯片替代? …

查看全部问答>

evc 编译完成 如何调试该程序?

我的意思是,用evc ide 直接连接 sdk 开发板(2410) 直接下载到板子上执行。 板子上已经用pb 4.2 编译的wince 下载完毕。 我目前只能evc ide 下载到 evc 的 模拟器上执行。 如何,让evc ide 连接 sdk (2410)直接执行呢? 需要配置什么?…

查看全部问答>

S3C2440中的Uart串口地址问题

请教S3C2440中的Uart串口地址问题:UART0的发送缓冲区地址为0X50000020,接收缓冲区地址为0X50000024,中间只相差4个字节,怎么来的64字节的FIFO缓冲区呢? 谢谢!…

查看全部问答>