打印

测串口的脉宽请问有什么好方法

[复制链接]
2339|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bragge|  楼主 | 2008-5-29 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2008-5-29 15:23 | 只看该作者

用数字示波器~~~~~~~

使用特权

评论回复
板凳
bragge|  楼主 | 2008-5-29 15:52 | 只看该作者

要用STM32F103测脉宽

我是想在下降沿的时候开定时上升沿的时候读取数据,香版主说会不准,不明白是为什么,还想知道还有什么其他更好的方法

使用特权

评论回复
地板
香水城| | 2008-5-29 16:28 | 只看该作者

请看我在你的另一个帖子中的回答


“在下降沿的时候开定时上升沿的时候读取数据”,我说这种方法不准是因为出现下降沿->判断到下降沿->打开定时器这个过程是有延迟的,如果出现下降沿时因为有其他的中断处理,打开定时器的操作将会被推迟,延迟时间无法预测。

好的方法我在你的另一个帖子中的回答了:捕获模式下什么时候定时器开始计数
 
对不起没有在站内短信中回答你的问题,这是因为我希望所有人看到我们的讨论并得到学习的机会。

使用特权

评论回复
5
bragge|  楼主 | 2008-5-29 17:06 | 只看该作者

谢谢版主

我考虑的有点局限所以都没考虑到中断,版主说的太好了。不过我要做的没有中断,嘿嘿。
我已经用这种方法编好了程序,测了两次,前后两次的数据还是差不多的,接收到的数据也是对的。
int main(void)
{
#ifdef DEBUG
  debug();
#endif

  /* System Clocks Configuration */
  RCC_Configuration();

  /* NVIC configuration */
  NVIC_Configuration();

  /* Configure the GPIO ports */
  GPIO_Configuration();
  
  USART_InitStructure.USART_BaudRate = 300;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_Even;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_Clock = USART_Clock_Disable;
  USART_InitStructure.USART_CPOL = USART_CPOL_Low;
  USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
  USART_InitStructure.USART_LastBit = USART_LastBit_Disable;

  /* Configure USART2 */
  USART_Init(USART2, &USART_InitStructure);
  
  /* Enable the USART2 */
  USART_Cmd(USART2, ENABLE);           
  TIM_PrescalerConfig(TIM2, 10, TIM_PSCReloadMode_Immediate);
  TIM_SetCounter(TIM2,0);

  while(count<1500000)
  {
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1)
      count++;
    else
      count=0;
  } 
  while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)==1) ;
  TIM_Cmd(TIM2, ENABLE);                                     //开定时器
  while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)==0)  ;
  time=TIM_GetCounter(TIM2);
  TIM_Cmd(TIM2, DISABLE); 
  TIM_PrescalerConfig(TIM2, 10, TIM_PSCReloadMode_Immediate);
   while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)==1) ;
  TIM_Cmd(TIM2, ENABLE);                                     //开定时器
  while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)==0)  ;
  time1=TIM_GetCounter(TIM2);
  TIM_Cmd(TIM2, DISABLE);
  
   while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET)
   {
   }

    /* Store the received byte in RxBuffer */
    RxBuffer[1] = (USART_ReceiveData(USART2) & 0xFF);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

45

帖子

0

粉丝