最近做了一款产品,使用STM8S003F3的片子,产品要求使用TIM2,在PD2引脚输出PWM波形。
安装了STM8专用版的IAR,下载了STM8的库文件,新建了工程,开始编写功能。
由于没有STM的经验,也是查阅了大量资料,花了1天时间搭建环境,写了一个简单的IO口定时输出高低电平的测试程序进行测试,用库文件,GPIO控制还算简单。
但是在接下来的一步,采用TIM2,在PD2引脚上输出波形时,出了问题。怎么配置都没有波形输出,上网查资料,才知道原来TIM2的CH3通道,有两路,一路是PA3,一路是PD2,GPIO复用,需要配置复用资源。量了量PA3,该引脚有输出,TIM2的初始化代码如下:
// init timer1 /1 perscaler-16MHz/up counter mode
// /time overload value/start at 0
TIM2_TimeBaseInit( TIM2_PRESCALER_1 , 16 );
// interrupt config and enable
TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE );
// enable auto reload
TIM2_ARRPreloadConfig( ENABLE );
// 50% pulse width
TIM2_OC3Init( TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE, 8,
TIM2_OCPOLARITY_LOW );
TIM2_CCxCmd( TIM2_CHANNEL_3, ENABLE );
TIM2_OC3PreloadConfig( ENABLE );
// start timer
TIM2_Cmd( ENABLE );
// start interrupt
__enable_interrupt();
STM8片子如图所示:
找到原因后,那就找相应的解决办法就行了,先查了查STM8库文件的帮助手册,查阅相关函数,没有发现跟复用引脚有关的函数,然后查了查STM8的中文数据手册,手册上关于复用的那一页真凑巧没了,一脸黑线。上网查了查,找到了解决方法,直接在升级工具STVP上修改引脚复用配置即可。具体配置如下:
首先选择要升级的程序,然后点击【OPTION BYTE】按钮,在该界面的AFR1后边,点小三角,选择如图中红框的配置(其他复用可自行查看),选择好后,点击下载,完成后,GPIO复用配置就OK了,使用示波器量了量,成功在PD2上输出了PWM波,而PA3上的PWM波则没有了。
关键字:STM8S003 GPIO 复用问题
引用地址:
【STM8S003】GPIO复用问题 TIM2_CH3 采用PD2引脚输出
推荐阅读最新更新时间:2024-11-06 11:14
STM32学习笔记 — 之GPIO端口篇
最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍: 每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和GPIOx_BRR 寄存器
[单片机]
STM8s003(也包括103)使用笔记
1、使用LED之前需要初始化IO口 2、使用外部中断时,需要初始化IO口,配置触发边沿,然后在中断函数中进行处理 注意: 使用可屏蔽中断时需要加上 rim(); 3、使用beep时,需要初始化IO口,校准128K时钟,使能时钟, 注意:使用Beep时需要配置选项字节 选项字节使用iar配置方式: FLASH_Unlock(FLASH_MEMTYPE_DATA); FLASH_ProgramOptionByte(0x4803, 0x00); FLASH_Lock(FLASH_MEMTYPE_DATA); 编程 4、对于awu唤醒单元定时3s的问题 时基单元做成1s,然
[单片机]
【ARM】s3c2440之gpio按键控制
功能 通过GPIO,实现按键1点亮LED1,按键2点亮LED2…… 说明 1)因为2440的按键只涉及行,所以在扫描按键时比2410简单了很多 2)在进行移位操作之前,必须进行数据寄存器的初始化,否则会出错(硬件特性) 源码 /***************************************************************************** *****函数名:main() *****功 能:通过GPIO,实现按键1点亮LED1,按键2点亮LED2 *****说 明: *********************************************************
[单片机]
这8种STM32中GPIO工作模式,你都知道吗?
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点: 1、利用外部电
[单片机]
iTOP-4412嵌入式开发板ioremap控制GPIO寄存器
GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 GPIO的读和写以及其它任意功能。 需要的基础知识 虚拟地址和物理地址 内存管理单元概念 linux 驱动模块的加载 主要内容 GPIO 的寄存器文档详细介绍和说明 函数 ioremap的用法 使用 ioremap实现对 GPIO的控制 硬件 以 LED2(靠近蜂鸣器的 LED)为例,介绍原理图以及Datasheet 中对应的寄存器。 原理图 打开底板原理图 pdf文档,如下图所示,选取 LED2,网络标号是 KP_COL0。 通过查找网络标号 KP_COL0,发现 KP_COL0接到连接器上,如下图所示
[单片机]
STM8 GPIO模式
GPIO_Mode_In_FL_No_IT 浮空输入无中断 GPIO_Mode_In_PU_No_IT 上拉输入无中断 GPIO_Mode_In_FL_IT 浮空输入有中断 GPIO_Mode_In_PU_IT 上拉输入有中断 GPIO_Mode_Out_OD_Low_Fast 开漏-输出低-高速 Output open-drain, low level, 10MHz GPIO_Mode_Out_PP_Low_Fast 推挽-输出低-高速 Output push-pull, low level, 10MHz GPIO_Mode_Out_OD_Low_Slow 开漏-输出低-低速 Output open-drain, lo
[单片机]
stm8的GPIO引脚模式
GPIO_Mode_In_FL_No_IT 浮空输入无中断 GPIO_Mode_In_PU_No_IT 上拉输入无中断 GPIO_Mode_In_FL_IT 浮空输入有中断 GPIO_Mode_In_PU_IT 上拉输入有中断 GPIO_Mode_Out_OD_Low_Fast 开漏-输出低-高速 Output open-drain, low level, 10MHz GPIO_Mode_Out_PP_Low_Fast 推挽-输出低-高速 Output push-pull, low level, 10MHz GPIO_Mode_Out_OD_Low_Slow 开漏-输出低-低速 Output open
[单片机]
STM32-(05):GPIO原理与操作
简单分析:红色框主要是输出电路(O),蓝色框主要是输入电路(I);关于输出电路,可以通过写位设置/清除寄存器来改变输出数据寄存器,或者直接读写输出数据寄存器,有这两种方式,继而通过I/O端口输出。如果打开了复用功能,就走复用的通道,输出控制就是一个锁存器。若寄存器写入1,输出控制的上方输出1,则CMOS管P-MOS导通,CMOS管N-MOS不导通,输出高电平,若寄存器写入0,输出低电平。关于输入电路,I/O进来有两个保护二极管,防止电压过高,再进入,有两个电阻,上拉和下拉,当不拉时为浮空输入,一般用于模拟输入,经过施密特触发器,如果用作GPIO口,将值写入寄存器,如果用作复用,走复用通道。 GPIO功能描述 端口配置表+
[单片机]