OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9044|回复: 12

新手关于串口发送问题

[复制链接]

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
发表于 2012-10-24 14:05:43 | 显示全部楼层 |阅读模式

调试2天了,还是找不出原因所在。串口调试工具硬是接收不到STM发出的串口数据
     请各位大哥帮忙看看哪里出问题了吧
#include "stm32f10x.h"

void RCC_Configuration(void)
{
 ErrorStatus HSEStartUpStatus;
 RCC_DeInit();
 RCC_HSEConfig(RCC_HSE_ON);
  HSEStartUpStatus = RCC_WaitForHSEStartUp();
  if(HSEStartUpStatus == SUCCESS)
  {
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  FLASH_SetLatency(FLASH_Latency_2);
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  {
  }
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  while(RCC_GetSYSCLKSource() != 0x08)    //0x08: PLL作为系统时钟
  {
  }
 }
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);

}


void GPIO_Configuration(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
    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);
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void USART_Configuration(void)                        //串口初始化函数
{
 USART_InitTypeDef  USART_InitStructure;
 USART_InitStructure.USART_BaudRate = 9600;//一般设置为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_Cmd(USART1, ENABLE);                    //使能串口
}

int main (void)
{
 RCC_Configuration();          
 GPIO_Configuration(); //IO配置
 USART_Configuration();//USART2配置                    
 while(1)
 {
  USART_SendData(USART1,0XFF);
  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  } 
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-24 14:34:36 | 显示全部楼层
干嘛不用别人的代码试试先?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-8-7
在线时间
1 小时
发表于 2012-10-24 14:36:22 | 显示全部楼层
楼主,我用我的板子测试了你的程序,编译出现两个错误,主要是RCC_Configuration这个函数,由于我用的是3.5版本的库,所以设置只需要你的这两条语句即可:
void RCC_Configuration(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
}
3.5版本的库在进入main之前都已经设置好了(具体你去参考相关资料)。
我改动后,编译通过。下载进去能收到FF.所以程序没问题。
另外,注意串口软件要设置成hex显示,否则就算收到了也不能显示。不晓得你是不是犯了这个错误。
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:37:23 | 显示全部楼层
2漏,我的也是3.5的库,怎么我编译没问题的呢?
     
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:38:13 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
别人的代码试过了,有的如果是HEX文件的话,就能正常使用,如果是我把别人的源文件移植到我的程序里面来,就会出现问题了
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:40:22 | 显示全部楼层
回复【3楼】草尼玛:
---------------------------------
我用的也是3.5的库,但是编译出来没问题。
   是不是文件结构出现的问题呢?
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:45:13 | 显示全部楼层
回复【3楼】草尼玛:
---------------------------------
你好,能把你的文件结构,添加的那些文件说说嘛?我试了试你改的那个之后,还是不能接收
回复 支持 反对

使用道具 举报

25

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-8-7
在线时间
1 小时
发表于 2012-10-24 14:45:49 | 显示全部楼层
你按照我的把RCC_configuration()这个函数改改试试,还有,你注意那个软件下方有个S和R的框框,R的后面数字是不是0,如果不是零而一直在增加,那肯定是你串口没设置正确,比如波特率啊什么的,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-24 14:47:01 | 显示全部楼层
回复【5楼】颓废ю小寶:
---------------------------------
那就软件仿真,看看各个寄存器的值。对比下,很快就找到到原因了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:50:32 | 显示全部楼层
回复【8楼】草尼玛:
---------------------------------
我改了那个RCC了,而且你说的那个  S  R计数的都是0
    所以我觉得应该是我建立工程的时候有可能文件弄的不是很好,能把你的文件结构那些说说嘛?
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 14:56:49 | 显示全部楼层
还有,有些头文件应该不要改吧。
   我就改过stm32f10x.h这个头文件里面的  #define STM32F10X_MD  这个选项,它本来是注释的,我把/*  */  这个注释符去掉了。感觉在用其他程序里面没问题的。
    我文件里面就添加了:   
stm32f10x.h 
system_stm32f10x.c
system_stm32f10x.h
core_cm3.c
core_cm3.h
startup_stm32f10x_md.s
stm32f10x_conf.h
stm32f10x_it.c
stm32f10x_it.h
main.c
Libraries文件夹中的inc和src文件
回复 支持 反对

使用道具 举报

25

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-8-7
在线时间
1 小时
发表于 2012-10-24 14:59:14 | 显示全部楼层
回复【10楼】颓废ю小寶:
---------------------------------
文件结构我就是参考光盘里面的,这个挺随意的,只要你包含路径就不会出问题
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-10-24 15:06:00 | 显示全部楼层
多谢原子和尼玛大婶了,我终于搞定了 ,原来是我没生成新的HEX文件。那选项没打勾。就一直用以前错的HEX文件烧写进去。怪不得我怎么每次烧程序进去不管改成什么样子,总是5K
    以前用的时候打勾了,出问题后总调试。不知道什么时候重新弄过他,结果HEX那项就没打勾了。
        多谢你们了啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表