[STM8] 请问有哪位好心大哥可以发份 stm8的输入捕获的程序,最好是库的。

[复制链接]
843|3
 楼主| 15236227719 发表于 2016-1-1 15:53 | 显示全部楼层 |阅读模式
请问有哪位好心大哥可以发份 stm8的输入捕获的程序,最好是库的。
zcc1837296405 发表于 2016-1-6 09:39 | 显示全部楼层
设置管脚,设置中断,捕获,处理
huangcunxiake 发表于 2016-1-6 15:09 | 显示全部楼层
我刚好有这个资料
  1. 第一部:
  2. 内部时钟 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //16M
  3. 第二步:
  4. 配置IO口 我用的是STM8S103k3t6
  5. GPIO_Init(GPIOB , GPIO_PIN_0 , GPIO_MODE_IN_PU_NO_IT);//TIM1_CH1 PB0端口
  6. 第三步:TIM1初始化,
  7. 注意:
  8. tim1 分频是16000000/1600 =10000
  9. 那计数一下的时间是!1/10000 S
  10. 向上计数 0到20000 的时间是2S

  11. void TIME1_INIT(void)
  12. {
  13. TIM1_DeInit();
  14. TIM1_TimeBaseInit(1600, TIM1_COUNTERMODE_UP, 20000, 0);
  15. TIM1_ICInit( TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV8, 0x0);
  16. TIM1_ITConfig( TIM1_IT_CC1 , ENABLE);
  17. TIM1_ClearFlag(TIM1_FLAG_CC1);
  18. TIM1_Cmd(ENABLE);
  19. }

  20. 第四步: TIM4用来产生溢出中断用的!
  21. void TIME4_INIT(void)
  22. {
  23. TIM4_TimeBaseInit(TIM4_PRESCALER_32 ,250);
  24. TIM4_ARRPreloadConfig(ENABLE);
  25. TIM4_PrescalerConfig(TIM4_PRESCALER_32,TIM4_PSCRELOADMODE_IMMEDIATE);
  26. TIM4_SetAutoreload(250);
  27. TIM4_Cmd(ENABLE);
  28. TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
  29. }

  30. 第五步: TIM1的中断程序 连续进入两次中断,两次计数的值 乘 第三步中计数一下的时间 就是脉宽
  31. // if(TIM1_GetFlagStatus(TIM1_FLAG_CC1))
  32. if(TIM1_GetITStatus(TIM1_FLAG_CC1) != RESET)
  33. {
  34. switch(temp)
  35. {
  36. case 0: ICValue1=TIM1_GetCapture1();
  37. temp=1;
  38. break;
  39. case 1: ICValue2=TIM1_GetCapture1();
  40. temp=2;
  41. break;
  42. default:
  43. TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
  44. TIM1_ITConfig(TIM1_IT_CC1, DISABLE);
  45. temp=3;
  46. break;
  47. }
  48. TIM1_ClearITPendingBit(TIM1_IT_CC1);
  49. TIM1_ClearFlag(TIM1_FLAG_CC1);
  50. }

  51. 第六步:
  52. TIM4的中断程序
  53. if(temp==3)
  54. {
  55. temp=0;
  56. if(ICValue2>ICValue1)
  57. {
  58. disvalue=ICValue2-ICValue1;
  59. }
  60. else if(ICValue2<ICValue1)
  61. {
  62. //disvalue=0xffff+ICValue2-ICValue1;
  63. disvalue=20000+ICValue2-ICValue1; //防止计数到末端的时候 重新计数
  64. }
  65. val[i0++] = disvalue;
  66. if(i0>10) i0=0;
  67. display();
  68. TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);
  69. TIM1_ITConfig(TIM1_IT_CC1, ENABLE);
  70. }
  71. else
  72. {
  73. display();
  74. }
  75. TIM4_ClearITPendingBit(TIM4_IT_UPDATE);


Soraka 发表于 2016-1-6 20:23 | 显示全部楼层
21ic的下载站里有STM8S例程集合
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

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