历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2021年02月06日 | STM8库函数开发手册(1) //工程模板、GPIO、时钟

2021-02-06 来源:eefocus

第一部分 创建库函数工程

1、创建文件目录

BSP文件夹中存放自定义底层驱动程序文件;

IAR文件夹存放IAR工程文件;

LIB 文件夹中引入C 语言自己的库函数;

USR 文件夹中存放自定义主程序及数据库头文件等;

Readme 文件夹中存放自定义程序设计说明文件;

2、将STM8库函数文件拷贝入LIB文件夹

链接:

https://pan.baidu.com/s/1llVx9meEhhk0VYKbsKzLxwpan.baidu.com

提取码:iy3v

下载解压后进入官方库函数目录:

打开LibrariesSTM8S_StdPeriph_Driver文件夹,找到inc 和src文件夹

就是我们的官方库文件啦

将其拷贝到我们的LIB下:

inc文件夹是.h文件集合

src文件夹是.c文件集合

3、将STM8中断入口文件拷贝入USR文件夹

STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_Template文件夹下拷贝如下文件

将stm8s_it.c、stm8s_it.h拷贝到USR文件夹下

4、将stm8s_conf.h(目录文件)拷贝到LIB文件夹下

STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_Template文件夹下拷贝如下文件

将stm8s_conf.h(目录文件)拷贝到LIB文件夹下

关于stm8s_conf.h的介绍:

stm8s_conf.h是官方固件库头文件的集合,如果不需要某个方面的功能,可以将对应头文件的声明注释掉。

5、打开IAR新建工程

记得把工程放入IAR文件夹下

6、将工程文件结构与IAR工程结构对应起来

IAR文件夹是存工程的,不需要添加

7、往工程树中添加文件

①、往USR中添加stm8s_it.c(不需要添加.h)

②、LIB中添加stm8s_conf.h

8、保存工程到IAR文件夹下

9、在IAR工程中创建main.c

添加入工程中USR树下

10、创建pbdata.h pbdata.c文件并添加入USR文件夹下

(这两个文件用来存储公共函数)

解决公共调用函数重复调用问题,可以这样定义头文件

11、配置工程设置

①、选定MCUi型号

②、选定调试方式

③、选定编译输出格式

④、⭐设置工程调用目录⭐

$PROJ_DIR$..libinc
$PROJ_DIR$..libsrc
$PROJ_DIR$..lib

$PROJ_DIR$..usr 

$PROJ_DIR$..bsp

$PROJ_DIR$..iar

12、在main.c中写main函数

13、在pbdata.h中包含 stm8.h

14、在 stm8.h中选中我们用的芯片

15、尝试编译,至此一个库函数工程已经搭建完成

最终目录如下:

16、为了完善工程,我们需要一个断言函数来为程序提供参数检查


#include "pbdata.h"int main(void){

    //main}/*断言函数:它的作用是在编程的过程中为程序提供参数检查*/#ifdef USE_FULL_ASSERTvoid assert_failed(u8* file,u32 line){

  while(1)

  {

  }}#endif


17、其实我们还没有引用官方功能库文件,可以用什么引用什么,引用方法如下:

在LIB里添加对应的库文件的.c文件就可以了


18、我们自己写的代码放在哪?

例如我们要写一个led驱动,创建led.h 和led.c文件,然后放入BSP文件夹下,同时将led。c引入工程树下BSP下。

在led.h中要也要这样定义头文件


#ifndef _LED_H#define _LED_H#include "stm8s.h"#endif


在led.c中引用pbdata.h,而在pbdata.h中引用led.h

CSDN-专业IT技术社区-登录blog.csdn.net


第二部分 GPIO库 (gpio.c)

1、GPIO_Init(GPIOx,GPIO_Pin,GPIO_Mode) // GPIO初始化

其中GPIO_Pin

其中GPIO_Mode

GPIO_Init(GPIOA, GPIO_PIN_LNIB, GPIO_MODE_IN_FL_NO_IT);

2、GPIO_DeInit(GPIOx) //GPIO回复初始状态

注意:复位状态下,所有的引脚都是悬浮输入模式

GPIO_DeInit(GPIOA);

3、GPIO_Write(GPIOx,PortVal) //GPIO按组写值

GPIO_Write(GPIOA, 0x00);

4、GPIO_WriteHigh(GPIOx,PortPins) //GPIO按引脚号写1

GPIO_WriteHigh(GPIOA, GPIO_PIN_0);

5、GPIO_WriteLow(GPIOx,PortPins) //GPIO按引脚号写0

6、GPIO_WriteReverse(GPIOx,PortPins)

7、GPIO_ReadInputData(GPIOx) //读取GPIO输入寄存器值

u8 port_value;port_value = GPIO_ReadInputData(GPIOA);

8、GPIO_ReadOutputData(GPIOx) //读取GPIO输出寄存器值

u8 port_value;port_value = GPIO_ReadOutputData(GPIOA);

9、GPIO_ReadInputPin(GPIOx,GPIO_Pin) //读取GPIO输入寄存器特定引脚位的值

10、GPIO_ExternalPullUpConfig(GPIOx,GPIO_Pin,NewState)

//设置某引脚使能上拉电阻

NewState:ENABLE或者DISABLE


第三部分 时钟控制库 (clk.c)

1、CLK_DeInit() //恢复相关的时钟寄存器到默认值

CLK_DeInit();

2、CLK_HSECmd(NewState) //启动或者关闭外部高速振荡器(HSE)

NewState:ENABLE或者DISABLE

3. CLK_HSICmd(NewState) //启动或者关闭内部高速振荡器(HSI)

4. CLK_LSICmd(NewState) //启动或者关闭内部低速振荡器(LSI)

5. CLK_CCOCmd(NewState) //启动或者关闭内部时钟输出功能

6. CLK_ClockSwitchCmd(NewState) //启动或者关闭内部时钟切换

7. CLK_FastHaltWakeUpCmd(NewState) //启动或者关闭快速唤醒功能

8. CLK_SlowActiveHaltWakeUpCmd(NewState) //启动或者关闭活跃停机模式下的电压调节器

9.CLK_ITConfig(CLK_IT,NewState) //启动或者关闭指定的时钟中断

其中CLK_IT的取值:

10. CLK_ClockSwitchConfig(CLK_SwitchMode,CLK_NewClock,ITState,CLK_CurrentClockState) //系统时钟切换配置

其中:

CLK_SwitchMode:切换模式(MANUAL和AUTO两种方式)

CLK_NewClock:DISABLE或者ENABLE

ITState:DISABLE或者ENABLE

CLK_CurrentClockState:DISABLE或者ENABLE

11、CLK_HSIPrescalerConfig(HSIPrescaler) //配置内部高速振荡器(HSI)的分频器

其中:HSIPrescaler取值

12、CLK_CCOConfig(CLK_CCO) //配置时钟输出脚(CCO)的时钟源

其中CLK_CCO:

13、CLK_PeripheralClockConfig(CLK_Peripheral,NewState)

//启动或者关闭指定的外设时钟

其中CLK_Peripheral取值:

CLK_PERIPHERAL_I2C

CLK_PERIPHERAL_SPI

CLK_PERIPHERAL_UART1 ~3

CLK_PERIPHERAL_TIMER1 ~6

CLK_PERIPHERAL_AWU

CLK_PERIPHERAL_ADC

CLK_PERIPHERAL_CAN

14. CLK_SYSCLKConfig(CLK_Prescaler) //配置系统时钟分频器

其中CLK_Prescaler的值:

15、CLK_SWIMConfig(CLK_SWIMDivider) //配置SWIM时钟分频器

其中:

16、CLK_CANConfig(CLK_CANDivider) //配置CAN时钟频率

其中:

17、 CLK_ClockSecuritySystemEnable() //启用时钟安全系统

19. CLK_AdjustHSICalibrationValue(CLK_HSICalibrationValue)

//修复内部高速振荡器频率

20.CLK_GetClockFreq() //获取系统时钟频率

u32 u32_clk_freq;
u32_clk_freq = CLK_GetClockFreq();

21. CLK_GetSYSCLKSource() //获取系统时钟源

22. CLK_GetFlagStatus //获取系统时钟标志状态

23. CLK_GetITStatus(CLK_IT) //获取系统时钟中断标志状态

其中:

24.CLK_ClearITPendingBit(CLK_IT) //清除系统时钟中断标志状态

CLK_ClearITPendingBit(CLK_IT_CSSD);


推荐阅读

史海拾趣

Elpaq公司的发展小趣事
捷茂微(GATEMODE)公司的发展小趣事
Digilent公司的发展小趣事

DIALIGHT在全球范围内不断拓展业务,目前在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设有业务。公司的LED产品广泛应用于各种工业场所,包括石油和天然气、矿业、化工、制造业等。通过提供定制化的照明解决方案,DIALIGHT赢得了众多客户的信赖和好评。

国炬(GOOGLL)公司的发展小趣事
可能是由于场效应管损坏、电源电压不足或负载阻抗过大等原因引起。解决方法包括更换损坏的场效应管、检查电源电压并适当提高或降低负载阻抗。
Belden Wire & Cable公司的发展小趣事

在1902年,Joseph C. Belden在美国芝加哥创立了Belden公司,标志着这家电线电缆公司的诞生。创立初期,公司便专注于电线电缆的研发和生产,凭借其卓越的产品质量和可靠的性能,逐渐在市场上崭露头角。随着业务的发展,Belden逐渐扩大了生产规模,并增设了多个生产基地,以满足不断增长的市场需求。

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

问答坊 | AI 解惑

那位大哥大姐有产生 白噪声信号,正弦波信号,脉冲信号,三角波,锯齿波的C/C++程序

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 内容同上,最好是完整的源代码程序,因为我是新手,小弟在次不胜感激啊!  …

查看全部问答>

ADS J-TAG 串口驱动 安装视频

ADS  J-TAG  串口驱动  安装视频   无声.…

查看全部问答>

讨厌的VAV (ZT)

我们大厦被投诉最多的是空调,几乎都是VAV。反应慢,可控性差,该出风时不出风,不该出风时狂出...... 最后害得技工不得不在电脑上控制几乎每个VAV,快把人累死。 其实最好的方式是在温控器上能直接控制风阀大小,不要什么VAV,什么PID.....其实 ...…

查看全部问答>

好机会!赴加拿大软件技术工程师4~10万加元年薪

1、高级动画特效编辑 2、嵌入式软件设计 3、MIS软件设计 4、2D与3D多媒体软件应用 5、软件产品开发 6、通信软件设计 以上职位要求: 1、本科学历或2年以上计算机专业学习证书 2、达到英语或法语工作水平 3、两年以上连续相关工作经历 签 ...…

查看全部问答>

USB HID minidriver的问题

  我在做一个HID USB设备的minidriver,USB设备总是循环的发送相同的数据,在以中断传输方式读取数据的时候,我不知道该采用怎么样的方式:    1. 根据Walter Oney,HID USB设备的hidMinidriverRegistration.DevicesArePolled ...…

查看全部问答>

用wavecom模块开发时出现模块收不到数据现实怎么回事?

用wavecom模块开发时出现模块收不到数据现实怎么回事?我用PPP建六连接后,用UDP发数据,发到服务中心软件上,数据能收到可是服务中心软件回的数据,我的串口收不到,不知是模块收到没转到串口还是就没收到?? 用TCP也是这样,在TCP建立连接时,用抓包工具 ...…

查看全部问答>

WINCE 如何显示24bit真彩

请教各位高手,WINCE 2440 下如何正确显示24bpp。之前有看别人的论坛,只提到初始化设置成24bit,驱动设置成32bit,有没有详细点的答案呢,按我自己的理解改完以后是一片花屏。(之前16bpp显示是OK的。)…

查看全部问答>

STM32-Oneday技术讲座

  大家可以通过各种渠道拿到工具了,不知道有没有必要搞一个全国范围的技术讲座,围绕着软件,还有芯片的外围功能和调试技术,做一个入门级的培训。可以送一些书,,,  上海,深圳,北京  拿到工具的人希望讲 ...…

查看全部问答>

IARFORARM5.11和IARFORARM4.42什么关系?

                                 5.11是4.42的升级版吗?为什么没有它们中间的版本?学习STM32F两个版本一样用吧?…

查看全部问答>