4回答

0收藏

一个串口调试程序

#竞赛 #竞赛 3164 人阅读 | 4 人回复 | 2013-08-17

#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 (69.26 KB, 下载次数: 60)

I2D[R$)I}B@W42K[M6JQYHN.jpg
分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

kk5290122

发表于 2013-8-17 15:54:39 | 只看该作者

lz可以在中断里面加个检测,看看有没有进入中断程序呢??
板凳

jinshaomin

发表于 2013-8-17 16:01:31 | 只看该作者

kk5290122 发表于 2013-8-17 15:54
lz可以在中断里面加个检测,看看有没有进入中断程序呢??

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

kk5290122

发表于 2013-8-17 17:59:13 | 只看该作者

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

我也不知道,我的也是不能进入中断,不知道啥原因。
5#

jinshaomin

发表于 2013-8-18 10:49:51 | 只看该作者

kk5290122 发表于 2013-8-17 17:59
我也不知道,我的也是不能进入中断,不知道啥原因。

sysTick_config(system_CoreClock/1000);加上就可以了
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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