查看: 2406|回复: 4

一个串口调试程序

[复制链接]
  • TA的每日心情
    开心
    2014-4-3 10:09
  • 签到天数: 149 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-8-17 13:10:55 | 显示全部楼层 |阅读模式
    分享到:
    #include <stm32f4xx.h>
    u8 suffer[100];
    u8 ok_to_send;
    u8 Rx_data_counter;
    void main()
    {
      
      char Tx_data_counter;
      
      SCB->AIRCR=0x05AF0000|0x400;//中断优先级分组 抢占:响应=3:1
      
      RCC->AHB1ENR|=0x00000008;//使能GPIOD时钟
      RCC->AHB1ENR|=(1<<18);//使能usart3时钟
      
      USART3->BRR=0x0000016C;//波特率115200
      
      /*
      使能usart3
      usart3发送使能
      usart3接收使能
      接收缓冲区非空中断使能
      8bit
      一位停止位
      无校验
      */
      USART3->CR1|=((1<<13)|(1<<3)|(1<<2)|(1<<5));
      
      GPIOD->AFR[1]|=0x00000077;//选择PD8,9复用功能
      GPIOD->MODER|=0xFFF0FFFF;//设置PD8,9复用模式
      GPIOD->MODER|=0x000A0000;
      
      GPIOD->OTYPER&=0xFFFFDFFF;//设置PD9推挽输出
      
      GPIOD->OSPEEDR&=0xFFFCFFFF;//PD8速度50m
      GPIOD->OSPEEDR|=0x00020000;
      
      GPIOD->PUPDR&=0xFFFCFFFF;//PD8
      GPIOD->PUPDR|=0x00010000;
      
      NVIC->IP[39]=0xf0;//最低抢占优先级,最低响应优先级1111
      NVIC->ISER[1]|=(1<<(39-32));
      
      while(1)
      {
        if(ok_to_send)//接收到数据,可以将数据发送
        {
          if((USART3->SR&(1<<7)));//发送寄存器空
          {
            USART3->DR=suffer[Tx_data_counter];
            Tx_data_counter++;
            if(suffer[Tx_data_counter]=='\0')
            {
              Tx_data_counter=0;
              USART3->CR1|=1<<5;//使能接收中断
              ok_to_send=0;
            }
          }
        }
      }
    }
    void USART3_IRQHandler(void)
    {
      if(USART3->SR&(1<<5))//接收数据寄存器非空
      {
        suffer[Rx_data_counter]=USART3->DR;
        Rx_data_counter++;
        if(suffer[Rx_data_counter-1]=='\0')
        {
          Rx_data_counter=0;
          USART3->CR1&=~(1<<5);
          ok_to_send=1;
        }
      }
    }
    这是《我的STM32f4学习历程》的串口调试程序,我用了一个RS232转TTL的转接板,用了串口大师,但是只是有发送记录,显示不了数据
    I2D[R$)I}B@W42K[M6JQYHN.jpg
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-7 21:35
  • 签到天数: 340 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-17 15:54:39 | 显示全部楼层
    lz可以在中断里面加个检测,看看有没有进入中断程序呢??
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-4-3 10:09
  • 签到天数: 149 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-8-17 16:01:31 | 显示全部楼层
    kk5290122 发表于 2013-8-17 15:54
    lz可以在中断里面加个检测,看看有没有进入中断程序呢??

    我是这样做的:打开串口大师,然后让它周期发送数据,IAR同时DEBUG,在中断函数的地方设置了断点,但是没有进去,为什么呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-7 21:35
  • 签到天数: 340 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-17 17:59:13 | 显示全部楼层
    jinshaomin 发表于 2013-8-17 16:01
    我是这样做的:打开串口大师,然后让它周期发送数据,IAR同时DEBUG,在中断函数的地方设置了断点,但是没 ...

    我也不知道,我的也是不能进入中断,不知道啥原因。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-4-3 10:09
  • 签到天数: 149 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-8-18 10:49:51 | 显示全部楼层
    kk5290122 发表于 2013-8-17 17:59
    我也不知道,我的也是不能进入中断,不知道啥原因。

    sysTick_config(system_CoreClock/1000);加上就可以了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-21 17:36 , Processed in 0.155224 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.