[STM32F1] STM32F103RBT6 TIM1 没有输出

[复制链接]
3810|16
 楼主| kingchenzb 发表于 2013-11-29 09:48 | 显示全部楼层 |阅读模式
    我在MDK环境下,调试的TIM1 的PWM,逻辑分析仿真有输出,但是下载到芯片就没有信号了。
其他定时器TIM2/3/4 都可以使用。程序应该没有问题的,我现在考虑是地址REMAP的问题,但是仿真与实际有很大差别我是不能接受,希望能从中学到东西。希望大神和版主不吝赐教!
hudi008 发表于 2013-11-29 12:15 | 显示全部楼层
不是remap吧,你使用默认管教也这样子么?
hudi008 发表于 2013-11-29 12:16 | 显示全部楼层
查看一下相关的寄存器。
gaochy1126 发表于 2013-11-29 12:22 | 显示全部楼层
看看重映射有没有打开?
missing01 发表于 2013-11-29 13:40 | 显示全部楼层
求楼主的串口下载工具
 楼主| kingchenzb 发表于 2013-11-29 14:40 | 显示全部楼层
hudi008 发表于 2013-11-29 12:15
不是remap吧,你使用默认管教也这样子么?

我没有用remap 没有输出,但是MDK debug 的logic 分析 有信号
 楼主| kingchenzb 发表于 2013-11-29 14:41 | 显示全部楼层
gaochy1126 发表于 2013-11-29 12:22
看看重映射有没有打开?

64pin 需要重映射吗 我看看吧。我不明白为什么仿真和下载到芯片有这么大差距!
 楼主| kingchenzb 发表于 2013-11-29 14:41 | 显示全部楼层
missing01 发表于 2013-11-29 13:40
求楼主的串口下载工具

我用j-link
 楼主| kingchenzb 发表于 2013-11-29 14:42 | 显示全部楼层
missing01 发表于 2013-11-29 13:40
求楼主的串口下载工具

我用的是J-LINK
missing01 发表于 2013-11-29 14:45 | 显示全部楼层
我找到了   谢谢
missing01 发表于 2013-11-29 15:02 | 显示全部楼层
能发个KEIL MDK开发的模板例程吗
missing01 发表于 2013-11-29 16:15 | 显示全部楼层
有STM32F051 库函数的中文说明吗?
 楼主| kingchenzb 发表于 2013-11-29 18:32 | 显示全部楼层
missing01 发表于 2013-11-29 16:15
有STM32F051 库函数的中文说明吗?

没有 网上搜 很多的
diweo 发表于 2013-11-29 18:53 | 显示全部楼层
有没有调用 TIM_CtrlPWMOutputs(TIM1, ENABLE); ?
TIM1和TIM8是高级定时器,与TIM2,3,4,5通用定时器不一样,一定要多调用上面的一句。
zhangmangui 发表于 2013-11-29 22:30 | 显示全部楼层
帮忙顶顶   
122541325 发表于 2013-11-30 22:16 | 显示全部楼层
看看映射有没有重复
 楼主| kingchenzb 发表于 2013-12-2 15:16 | 显示全部楼层
没问题了 谢谢大家的回复。换来一个板子就行了,可能是板子坏了。以下是详细的程序!简单明了!
TIM1 PWM的详细用法。
[TIM1 的 CH1 = PA.8和CH1N = PB.13]
Step1, 定义初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
Step2, 使能外设时钟 TIM1 GPIOA GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Step3, 初始化一会儿用到的GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(GPIOB, &GPIO_InitStructure);
Step4, 重设为缺省值
TIM_DeInit(TIM1); //重设为缺省值
Step5, TIM1时钟配置
TIM_TimeBaseStructure.TIM_Prescaler = 4000; //预分频(时钟分频)72M/4000=18K
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
TIM_TimeBaseStructure.TIM_Period = 144;//装载值 18k/144=125hz 就是说向上加的144便满
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置了时钟分割 不懂得不管
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;  //周期计数器值  不懂得不管
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
Step6, Channel 1 Configuration in PWM mode
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;     //PWM模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  //正向通道有效  PA8
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //反向通道也有效 PB13
TIM_OCInitStructure.TIM_Pulse = 40; //占空时间44 中有40的时间为高,互补的输出相反
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;   //输出极性
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;  //互补端的极性  
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //空闲状态下的非工作状态
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;  //先不管
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
Step7,  TIM1 counter enable开定时器
TIM_Cmd(TIM1,ENABLE);
Step8,  TIM1 Main Output Enable 使能TIM1外设的主输出 必须的别忘了
TIM_CtrlPWMOutputs(TIM1,ENABLE);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

46

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部