7104|8

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

stm32 串口调试不通 [复制链接]

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include

USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
  
int main(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* USART configuration */
  USART_Init(USART1,&USART_InitStructure);   
  /* Enable USART */
  USART_Cmd(USART1, ENABLE);
  /* Output a message on Hyperterminal using printf function */
  printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");
  while (1)
  {
  }
}
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART1, (uint8_t) ch);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  {}
  return ch;
}
#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
  while (1)
  {
  }
}
#endif
上面是我改的串口1的整个main程序,不知道是什么问题,下载到stm32里面就是没有反应,前提是我确定板子肯定没有问题,请大家帮帮我看看,到底是什么地方出了问题:我的芯片的型号是stm32f103ZET6,我是通过串口下载的。
此帖出自stm32/stm8论坛

最新回复

建议用示波器先看看TX 有没有波形输出吧。 没有输出就是软件哪里 没配置好。希望对你有帮助。 #include "stm32f10x.h" #include /*** 注:         调试程序前,需将PB4-Buzzer跳线(红色)取下,待程序调试结束后,             再接好跳线。             PB4引脚上电默认为JTAG-RST引脚。 ********************************************************************/ USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef  NVIC_InitStructure; u8 txbuffer1[] = "00:00:00"; u8 txbuffer2[] = "========================="; u8 txbuffer3[] = {0x0A,0x0D}; void GPIO_Configuration(void); void NVIC_Configuration(void); void USART_Configuration(void); void USART_SendString(u8 *str,u8 length); unsigned char a; unsigned char inputstr[128]; int main(void) {      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   GPIO_Configuration();   USART_Configuration();   USART_Cmd(USART1, ENABLE); //USART_SendString("\r\n\n\n WWW.ARMJISHU.COM your input is:\n\r[%s]\n\r",50); //printf("\r\n\n\n WWW.ARMJISHU.COM your input is:\n\r[%s]\n\r", inputstr);   while(1)   {                   USART_SendData(USART1,'1');           a=USART_ReceiveData(USART1);            if(a=='\r')           {        USART_SendData(USART1,'1');                   USART_SendData(USART1,'2');          }         else         {;}            //a=USART_GetData();    //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter        //USART_SendString(txbuffer1,sizeof(txbuffer1)-1);      //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter    //USART_SendString(txbuffer2,sizeof(txbuffer2)-1);      //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter   }   //while(1); } // void GPIO_Configuration(void) {   GPIO_InitTypeDef GPIO_InitStructure;   //RX   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   GPIO_Init(GPIOA, &GPIO_InitStructure);   //TX   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   GPIO_Init(GPIOA, &GPIO_InitStructure); } // void USART_Configuration(void) {   USART_InitStructure.USART_BaudRate = 9600;   USART_InitStructure.USART_WordLength = USART_WordLength_8b;   USART_InitStructure.USART_StopBits = USART_StopBits_1;   USART_InitStructure.USART_Parity = USART_Parity_No;   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   USART_Init(USART1, &USART_InitStructure);   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);   USART_ITConfig(USART1, USART_IT_TXE, ENABLE);   } // void USART_SendString(u8 *str,u8 length) {   u8 temp;   for(temp=0;temp  详情 回复 发表于 2012-8-21 07:21
点赞 关注
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没有人帮忙回答吗,请大家帮帮忙了,实在不知道什么地方出了问题
此帖出自stm32/stm8论坛

点评

用flash loader 下载后 boot0是要还原到接地的!然后再复位试试  详情 回复 发表于 2012-8-19 14:52
 
 

回复

66

帖子

4

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 shaohua411 的帖子

用flash loader 下载后    boot0是要还原到接地的!然后再复位试试
此帖出自stm32/stm8论坛

点评

你好,这个我不知道,不是板子不运行,而是程序的问题,麻烦你看看我的程序是不是有问题啊,这是针对3.5的库改的  详情 回复 发表于 2012-8-19 18:52
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 shirl 的帖子

你好,这个我不知道,不是板子不运行,而是程序的问题,麻烦你看看我的程序是不是有问题啊,这是针对3.5的库改的
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
你发送完数据之后是不是要对标志位进行置位啊?
就是 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)之后,
把标志位还原。
还有就是先试试低一点的波特率,比如9600,115200的波特率太高了,有可能设备本身就接受不了这么高的传输速度。
此帖出自stm32/stm8论坛
 
 
 

回复

28

帖子

1

TA的资源

一粒金砂(高级)

6
 
去纬图虚拟仪器论坛找找吧,那里有几个可以正常工作的串口程序,希望可以帮到你
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

你的时钟没有初始化

此帖出自stm32/stm8论坛

点评

如果是用的3.5的库的话在启动代码里面就已经调用时钟初始化函数了  详情 回复 发表于 2012-8-20 14:44
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

28

帖子

1

TA的资源

一粒金砂(高级)

8
 

回复 7楼 ddllxxrr 的帖子

如果是用的3.5的库的话在启动代码里面就已经调用时钟初始化函数了
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

9
 
建议用示波器先看看TX 有没有波形输出吧。 没有输出就是软件哪里 没配置好。希望对你有帮助。
#include "stm32f10x.h"
#include
/*** 注:
        调试程序前,需将PB4-Buzzer跳线(红色)取下,待程序调试结束后,
            再接好跳线。
            PB4引脚上电默认为JTAG-RST引脚。
********************************************************************/

USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef  NVIC_InitStructure;

u8 txbuffer1[] = "00:00:00";
u8 txbuffer2[] = "=========================";
u8 txbuffer3[] = {0x0A,0x0D};

void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void USART_SendString(u8 *str,u8 length);
unsigned char a;
unsigned char inputstr[128];
int main(void)
{
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  GPIO_Configuration();
  USART_Configuration();
  USART_Cmd(USART1, ENABLE);
//USART_SendString("\r\n\n\n WWW.ARMJISHU.COM your input is:\n\r[%s]\n\r",50);
//printf("\r\n\n\n WWW.ARMJISHU.COM your input is:\n\r[%s]\n\r", inputstr);
  while(1)
  {       
           USART_SendData(USART1,'1');
          a=USART_ReceiveData(USART1);
           if(a=='\r')
          {        USART_SendData(USART1,'1');
                  USART_SendData(USART1,'2');          }
        else
        {;}       
    //a=USART_GetData();
   //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter   
    //USART_SendString(txbuffer1,sizeof(txbuffer1)-1);  
   //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter
   //USART_SendString(txbuffer2,sizeof(txbuffer2)-1);  
   //USART_SendString(txbuffer3,sizeof(txbuffer3)-1);  //Enter

  }
  //while(1);
}

//
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //RX
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  //TX
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//
void USART_Configuration(void)
{
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART1, &USART_InitStructure);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  
}

//
void USART_SendString(u8 *str,u8 length)
{
  u8 temp;
  for(temp=0;temp   {
        USART_SendData(USART1,str[temp]);
    while(USART_GetITStatus(USART1, USART_IT_TXE) == RESET);
  }   
}
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表