OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2944|回复: 1

关于STM8S定时器TIM1的一些问题

[复制链接]

332

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1547
金钱
1547
注册时间
2014-7-11
在线时间
256 小时
发表于 2015-10-2 08:23:59 | 显示全部楼层 |阅读模式
5金钱


关于STM8S定时器TIM1的一些问题
if((*(pVoltageTable+VoltSub[n]))&0x01)
                    {
                        /*PWM打开*/
                        (*((__IO u8 *)(0x5258+n)))|=0x20;
                    }
                    else
                    {
                        /*PWM关闭*/
                        (*((__IO u8 *)(0x5258+n)))&=0xDF;
                    }



                     (*((__IO u8 *)(0x5258+n)))这句话是什么意思?是不是在操作PWM通道的地址控制他的开与关?

是TIM1里PWM的开关地址,TIM1->CCMR1 ,TIM1->CCMR2,   TIM1->CCMR3的开关地址,就是这几路PWM的开和关? 
TIM1的地址是0X5250(#define TIM1_BaseAddress        0x5250)

最佳答案

查看完整内容[请看2#楼]

你应该用寄存器来操作,直接操作地址也可以,但是这样很麻烦。寄存器就是有固定地址的变量,TIM1->CCMR1,TIM1->CCMR2之类就是了,如果是控制PWM开关的寄存器(就是某个固定地址)直接用就行了。 (*((__IO u8 *)(0x5258+n)))这个就是把某个内存地址转换成你能用的指针,内存地址都是一串数字,你要操作内存地址,C语言上就是指针的用法,明白了这个,你再看看0x5258是不是控制PWM开关的内存地址,如果是,就对了,一 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2015-10-2 08:24:00 | 显示全部楼层
你应该用寄存器来操作,直接操作地址也可以,但是这样很麻烦。寄存器就是有固定地址的变量,TIM1->CCMR1,TIM1->CCMR2之类就是了,如果是控制PWM开关的寄存器(就是某个固定地址)直接用就行了。
(*((__IO u8 *)(0x5258+n)))这个就是把某个内存地址转换成你能用的指针,内存地址都是一串数字,你要操作内存地址,C语言上就是指针的用法,明白了这个,你再看看0x5258是不是控制PWM开关的内存地址,如果是,就对了,一般人家都定义了寄存器的,找到它,直接用,看情况,寄存器是一个字节的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表