历史上的今天
返回首页

历史上的今天

今天是:2024年12月12日(星期四)

正在发生

2019年12月12日 | STM8S自学笔记之利用库函数点亮一个LED

2019-12-12 来源:eefocus

准备工作及前提 

a、已安装IAR或者STVD 

b、下载标准固件库(StdPeriph_Lib_V2.1.0)备用; 

c、已建立好一个程序模板,如未建立请参考我的博客中的帖子STVD+STM8官方固件库创建工程模板; 

d、(非必要)已下载STM8s库函数所在的程序版手册; 

e、(非必要)Flash Loader Demonstrator,这是ST的ISP烧写,对于STM8只有支持BootLoader的才行,STM8SF103本身木有BootLoader,需要自己写故而此处只是提及,但不要求,后期学习时再更新,但还是装上较好,因为要是后期我更新了呢。


使用软件 

STVD(全称ST Visual Develop)——编程使用; 

stm8slib(使用手册程序版) ——查找库函数及库函数的调用方法; 

STVP(全称ST Visual Programmer)——烧录程序;


开始 

1)模板准备工作 

a、复制程序模板,并重命名文件夹为LED,这样既保留了程序模板,又便于后期开发其他项目时不用再重新一步一步执行创建模板时的必要过程,节省时间; 

b、打开STVD后,选择File->Open Wodkspace,选中LED模板Cosmic下的Demo.stw打开即可,但还不忙写自己所要实现的任何功能的函数; 

c、为自己的主函数文件开始处添加块注释信息如下,完成后点击左侧方块收起块(如图)注释,方便管理和修改: 

/********************************************** 

** 文件名    :  main.c 

** 作       者 :  Killer 

** 创建日期 :  2017.12.16 

** 版       本 :  V0.1 

** 功能描述 :  ANSI C.主函数调用其他函数实验点 

**                    亮LED或者熄灭LED. 

**********************************************/

这里写图片描述

d、编译模板,没有错误时,开始添加自己要实现的功能代码。 


2)功能实现 

3.2.1、理清点亮LED逻辑思路 

a、LED的亮灭是由LED所在GPIO端口引脚输出高低电平来实现; 

b、根据电路接法选择GPIO端口、或者引脚工作模式、电平翻转速率; 

c、(非必要)可以在初始化端口前将对应GPIO端口寄存器恢复到默认值。 

注意:此处端口是指如GPIOA、GPIOB等,由8位(或者说8个引脚)组成,如51单片机的P0、P1等;而GPIO端口引脚、GPIO引脚、引脚则是这些端口的某一个引脚,如51单片机的P0.0,P1.1等,此处可以理解为GPIOA.0 GPIOB.2等;


3.2.2、根据思路在stm8s_gpio.c文件中查找响应函数 

a、经查看文件可将对应高低电平输出到引脚的函数原型如下: 

void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal); 

void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 

void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 

void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 

参数解释如下: 

GPIO_TypeDef* GPIOx:端口类型参数为GPIOA、GPIOB等具体端口; 

uint8_t PortVal:8位二进制组成的一个端口值,每一位操作一个引脚; 

GPIO_Pin_TypeDef PortPins:引脚类型数据,具体为GPIO_Pin_0~GPIO_Pin_7,神奇的是库函数还让你一次性操作高四位或者第四位参数为GPIO_PIN_LNIB(低四位),GPIO_PIN_HNIB(高四位),全部8位就是GPIO_PIN_ALL。 



3.2.3、初始化LED所在引脚 

继续查找stm8s_gpio.c,并找到类似Init字样即可,其中Init是Initialize的缩写。 

void GPIO_DeInit(GPIO_TypeDef* GPIOx); 

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); 

其中第一个为恢复到默认值(De【fault】)的初始化;第二个则是对应引脚的初始化; 



3.2.4、使用程序办库函数使用手册配置GPIO引脚 

a、运行 

这里写图片描述 

b、选择库函数功能及配置 

这里写图片描述 

图中手绘步骤数字描述: 

1步:选择对应功能的库函数; 

2~4步:选择该库函数的对应参数,例如本函数GPIO_Init: 

第一个参数为步骤2的LED所在端口; 

第二个参数为步骤3的对应LED在端口中所在引脚; 

第三个参数为该引脚工作模式选择; 

5步,将所选参数生成代码; 

6步:将生成的代码剪切至系统剪贴板,在STVD或其他IDE中粘贴即可。 



总体代码实现 

这里写图片描述

总结 

对于GPIO操作时须有如下步骤,即使是STM32、STC15等单片机,不论是库函数还是寄存器亦是如此: 

1、初始化端口 

2、初始化所在引脚并设置翻转速度、工作模式,如:开漏/推挽、输入/输出; 

3、对端口或者指定引脚写入数据;


推荐阅读

史海拾趣

Bliley Technologies Inc公司的发展小趣事

随着全球化趋势的加速,Bliley也开始积极实施全球化战略。公司不仅在美国本土建立了先进的制造工厂和研发中心,还积极拓展海外市场,与全球客户建立紧密的合作关系。通过全球化战略的实施,Bliley不仅扩大了其市场份额,也提升了其品牌影响力和国际竞争力。如今,Bliley的产品已经广泛应用于各个领域,包括航空航天、军事国防、移动通信、5G蜂窝和电信等。

这五个故事共同展现了Bliley Technologies Inc.在电子行业中的发展历程。从一家小型压电公司起步,通过不断创新和拓展,Bliley逐渐成长为晶振行业的领军企业,并在全球化市场中取得了显著成就。这些故事不仅反映了Bliley的辉煌历史,也预示着其未来更加广阔的发展前景。

统宇电研(Coilmaster)公司的发展小趣事

统宇电研深知品质对于企业的重要性,因此一直将品质管理作为公司的核心竞争力之一。公司建立了严格的品质管理体系,从原材料采购到产品出厂的每一个环节都进行严格把关。同时,统宇电研还注重员工品质意识的培养和提高,通过培训和实践相结合的方式不断提升员工的品质素养。这些努力使得统宇电研的产品品质得到了客户的广泛认可。

CIPS公司的发展小趣事

为了满足市场不断变化的需求,CIPS公司不断推出创新产品和服务。例如,推出了CIPS汇路指南、CIPS数据洞察等产品服务,这些服务不仅解决了跨境支付过程中的信息不对称问题,还提高了支付效率,降低了退汇率。此外,CIPS还推出了港元业务等多元化服务,进一步丰富了其服务内容与形式。

ABL Aluminum Components公司的发展小趣事

为了进一步提升竞争力,ABL公司开始实施国际化发展战略。公司首先在海外市场设立了销售分支机构,积极开拓国际市场。随后,ABL公司又在海外建立了生产基地,利用当地资源和优势降低生产成本。通过国际化发展,ABL公司不仅扩大了市场份额,还提高了品牌的国际影响力。

力芯微(ETEK)公司的发展小趣事

随着下游电子产品的更新换代和手机的快速普及,力芯微公司敏锐地捕捉到了这一市场机遇。公司及时调整研发方向,推出一系列低压低功耗的电源类产品,成功进入手机市场。这一转型不仅使公司实现了业务的多元化,也为公司带来了新的增长点。

Dalian Dlicap Corporation公司的发展小趣事

随着技术实力的不断增强,达利凯普开始积极拓展国际市场。公司的产品广泛应用于医疗核磁共振设备、半导体设备、工业激光设备、测量及分析设备、高速铁路、5G通信等高端制造领域。凭借卓越的产品质量和可靠的性能,达利凯普成功进入了美国、日本、英国、法国、德国等40多个国家和地区的市场,并与西门子医疗、通用电气、安捷伦等世界知名企业建立了长期稳定的合作关系。

问答坊 | AI 解惑

基于电流跟踪控制的高压钠灯电子镇流器研制

摘要:针对高压钠灯工作特点以及工作在高频状态下的缺陷,采用电流跟踪技术,设计了一种低频高压钠灯电子镇流器,并设计了可靠的逻辑控制启动电路。最后,给出实验结果。 关键词:高压钠灯;电子镇流器;闭环;电流跟踪   0    引 ...…

查看全部问答>

TSOP封装技术与SOP封装的区别?

在Protel中利用向导创建贴片元件时,你会发现SOP的管脚焊盘默认的是50milX100mil(毫英寸),而TSOP的参数书册给出的是18milX33mil,所以,我想问下是否TSOP(T-Type II)是SOP封装的浓缩型,尺寸有了压缩? 很多SDRAM(比如电脑上的内存条用的芯 ...…

查看全部问答>

除了定时器我还能用啥来喂狗

我用了一个看门狗芯片LTC1232,想每100ms喂狗,程序如下,OK没问题。 但现在我的两个定时器都要用到别的地方,做计数器用,难道我要在主程序里面每过一段时间喂狗码? 请高手指教 void time0() interrupt 1//定时器中断time0 {    ...…

查看全部问答>

keil注册问题

下了个keil3,但是怎么也注册不了,试了几个注册机。怀疑是注册步骤出错了,求详细注册步骤 感谢!!!…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

有谁用uclinux进行过嵌入式开发,请帮下忙!

我用的是ylp2440的开发板,其cpu是s3c2410,买的时候带来的是linux2.6.12的内核,以及arm-linux-gcc的交叉编译工具。现在我想让这个板子跑uclinux的系统,那样怎么弄?是不是把uclinux移植到板子上,然后找个交叉编译工具,在linux的虚拟机上编程? ...…

查看全部问答>

请问哪款传感器可以检测水果乙烯浓度

请问哪款传感器可以用来搭配单片机,实现检测水果散发的乙烯浓度的功能,哪位做过的请推荐一款,价格最好在500元左右的,谢谢…

查看全部问答>

NAND FLASH的spare区格式是什么啊?

NAND FLASH的spare区格式是什么啊? 小块的。。16BIT的。。。 …

查看全部问答>

问一个107+DP83848初始化的问题

请问一下调试过的朋友, STM32F107+DP83848做网络通讯, 在初始化的时候,是不是必须插网线?…

查看全部问答>