STM8S003F3使用总结——定时器

STM8S003F3有三个定时器,分别为16位高级定时器TIM1、16位通用定时器TIM2和8位基础定时器TIM4。其中,TIM1和TIM2支持PWM输出,本项目中用到了TIM1-CH1和TIM2-CH1两个通道作为PWM输出,以及TIM4作为时基,下面进入正文。

编译环境:IAR for STM8 3.10.2
库版本:V2.2.0

1.定时器

关于定时器没什么好说的,直接看下配置代码

void TIM1_Init(u16 psc, u16 arr, u16 duty)
{
    TIM1_TimeBaseInit(psc, TIM1_COUNTERMODE_UP,  arr, 0); 
    TIM1_OC1Init(TIM1_OCMODE_PWM1,        \ 
    		     TIM1_OUTPUTSTATE_ENABLE, \
    		     TIM1_OUTPUTNSTATE_ENABLE,\
    		     duty,					  \					
                 TIM1_OCPOLARITY_LOW,     \
                 TIM1_OCNPOLARITY_HIGH,   \
                 TIM1_OCIDLESTATE_SET,    \
                 TIM1_OCNIDLESTATE_RESET); 
    TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE); 
    TIM1_OC1PreloadConfig(ENABLE);
    TIM1_CtrlPWMOutputs(ENABLE);
    TIM1_Cmd(ENABLE);
}
void TIM2_Init(TIM2_Prescaler_TypeDef TIM2_Prescaler, u16 arr, u16 duty)
{
    TIM2_TimeBaseInit(TIM2_Prescaler, arr); 
    TIM2_OC1Init(TIM2_OCMODE_PWM1,       \
   				 TIM2_OUTPUTSTATE_ENABLE,\
           		 duty,					 \
    			 TIM2_OCPOLARITY_HIGH);  \
    		     TIM2_OC1PreloadConfig(ENABLE);
    TIM2_Cmd(ENABLE);
}
其中TIM2_Prescaler_TypeDef定义为:
typedef enum
{
	TIM2_PRESCALER_1     = ((uint8_t)0x00),
	TIM2_PRESCALER_2     = ((uint8_t)0x01),
	TIM2_PRESCALER_4     = ((uint8_t)0x02),
	TIM2_PRESCALER_8     = ((uint8_t)0x03),
	TIM2_PRESCALER_16    = ((uint8_t)0x04),
	TIM2_PRESCALER_32    = ((uint8_t)0x05),
	TIM2_PRESCALER_64    = ((uint8_t)0x06),
	TIM2_PRESCALER_128   = ((uint8_t)0x07),
	TIM2_PRESCALER_256   = ((uint8_t)0x08),
	TIM2_PRESCALER_512   = ((uint8_t)0x09),
	TIM2_PRESCALER_1024  = ((uint8_t)0x0A),
	TIM2_PRESCALER_2048  = ((uint8_t)0x0B),
	TIM2_PRESCALER_4096  = ((uint8_t)0x0C),
	TIM2_PRESCALER_8192  = ((uint8_t)0x0D),
	TIM2_PRESCALER_16384 = ((uint8_t)0x0E),
	TIM2_PRESCALER_32768 = ((uint8_t)0x0F)
}TIM2_Prescaler_TypeDef;
void TIM4_Init(TIM4_Prescaler_TypeDef TIM4_Prescaler, u8 arr)
{
    TIM4_DeInit();
    TIM4_TimeBaseInit(TIM4_Prescaler, arr);
    TIM4_ClearFlag(TIM4_FLAG_UPDATE);
    TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
    TIM4_Cmd(ENABLE);
}
其中TIM4_Prescaler_TypeDef定义为:
typedef enum
{
	TIM4_PRESCALER_1     = ((uint8_t)0x00),
	TIM4_PRESCALER_2     = ((uint8_t)0x01),
	TIM4_PRESCALER_4     = ((uint8_t)0x02),
	TIM4_PRESCALER_8     = ((uint8_t)0x03),
	TIM4_PRESCALER_16    = ((uint8_t)0x04),
	TIM4_PRESCALER_32    = ((uint8_t)0x05),
	TIM4_PRESCALER_64    = ((uint8_t)0x06),
	TIM4_PRESCALER_128   = ((uint8_t)0x07)
} TIM4_Prescaler_TypeDef;

高级定时器之所以高级是有原因的,更多的参数使功能更强大,当然这也不是绝对的,在项目开发中,有时候逻辑简化能使参数归一,但是并不影响实际功能。这里的参数一个是开放给开发者,一个是用户,并没有太大可比性,只是说明一种观点。

PWM1和PWM2两种模式的区别
TIM_OCMode_PWM1:

  • 当计时器值小于比较器设定值时则TIMX输出脚此时输出有效高电位。
  • 当计时器值大于或等于比较器设定值时则TIMX输出脚此时输出低电位。

TIM_OCMode_PWM2:

  • 当计时器值小于比较器设定值时则TIMX输出脚此时输出有效低电位。
  • 当计时器值大于或等于比较器设定值时则TIMX输出脚此时输出高电位。

------------------------------------------------------------我是分隔线-----------------------------------------------------------------

下面划重点
下面划重点
下面划重点

当一切准备就绪后,却发现PWM怎么都无法输出,折腾了好久,后来只好回归手册,在引脚说明表中对引脚说明如下:
在这里插入图片描述
很明显,这两个IO要作为PWM输出需要复用,但是复用方法很特殊,需要修改对应option bit,这里需要修改AFR0位才能输出PWM。那么现在的问题就是如何配置AFR0这个位了。

2.Option-Bytes配置

网上查找了相关问题后,这里做一下总结。
AFR0等选项组成Option-Bytes,那么如何配置Option-Bytes,这里总结三种方法。

  1. 基于IAR
    点击顶部菜单栏ST-LINK–>Option Bytes…
    在这里插入图片描述
    打开Option Bytes选项框,右键置位Alternate Active
    在这里插入图片描述

  2. 基于STVP
    如图所示,点击底部切换到OPTION BYTE界面,选择对应配置字即可。
    在这里插入图片描述

  3. 基于程序代码
    选项字节在片内地址如下:
    在这里插入图片描述在这里插入图片描述
    从表中可见,需要将OPT2的最低位AFR0置1,代码如下:

#define OPTION_BYTES_ADDR  0x4803

void Set_OptionByte(void)
{
	u16 Option_Bytes;
	Option_Bytes = FLASH_ReadOptionByte(OPTION_BYTES_ADDR);
	if(Option_Bytes & 0x01 == 0)
	{
		FLASH_ProgramOptionByte(OPTION_BYTES_ADDR, (u8)Option_Bytes | 0x01);
	}
}
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。
STM8S003F3是意法半导体(STMicroelectronics)推出的一款低功耗8位微控制器(MCU),具有丰富的外设和强大的性能。RS485是一种串行通信协议,常用于远距离通信和多节点通信。 STM8S003F3具有多个UART接口,可支持RS485通信。在使用RS485通信时,需要将RS485通信芯片与STM8S003F3相连接,如MAX485芯片。RS485通信芯片将负责物理层的电平转换和差分信号处理,而STM8S003F3则处理高层的数据协议。 通过配置STM8S003F3的UART接口,可以使用RS485通信协议进行数据传输。首先,需要设置UART的波特率、数据位、校验位和停止位等参数。然后,通过发送和接收数据的函数来实现与其他RS485设备的通信。在发送数据时,STM8S003F3将数据通过UART发送到RS485通信芯片,芯片再将信号转换为差分信号发送出去。在接收数据时,STM8S003F3接收差分信号,并通过UART接口将数据传输到内部缓冲区。 在使用STM8S003F3进行RS485通信时,需要注意以下几点: 1. 需要确保STM8S003F3和RS485通信芯片的电压兼容。 2. 需要配置正确的通信参数,包括波特率、数据位、校验位和停止位等。 3. 需要根据实际需求设置STM8S003F3的发送和接收缓冲区大小。 4. 需要编写相应的软件代码来实现数据的发送和接收,并对错误进行处理。 5. 需要对数据进行合适的校验和处理,确保数据的可靠性和完整性。 总结来说,STM8S003F3是一款强大的MCU,可以通过配置其UART接口实现与RS485设备的通信。通过正确配置通信参数和编写相应的代码,可以实现可靠的RS485通信,并用于远距离和多节点的数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值