OpenEdv-开源电子网

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

USART1 口firmwareV2.01库函数 编译正确,但是仿真结果不对

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-2-9
在线时间
0 小时
发表于 2011-2-18 18:33:42 | 显示全部楼层 |阅读模式
我用的是mdk4.14
程序是仿 mdk下面带的printf的例子写的
还加了点自己的创新!就是点亮LED,每点亮一次从USART1发送已经是第几次点亮了!上源码!求指教!
USART1的时钟初始化在 RCC_Configuration()函数的最后一行
并且在我的工程里包含了stm库函数的那个.lib库
附件里是我的整个工程
#include <stm32f10x_lib.h>
#include"stm32f10x_it.c"
#include<stdio.h>
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
void RCC_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
ErrorStatus HSEStartUpStatus;
int main(void)
{
int x=0;
#ifdef DEBUG
debug();
#endif
RCC_Configuration();
NVIC_Configuration();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA , ENABLE);
//LED初始化
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOD , &GPIO_InitStructure);
//串口GPIO初始化,先初始化TXD
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//初始化RXD
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//初始化串口
USART_DeInit(USART1);
USART_StructInit(&USART_InitStructure);
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);

//开始闪烁
  while (1)
  {
GPIO_SetBits(GPIOD,GPIO_Pin_2);
Delay(0xaffff);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
Delay(0xaffff);
printf("abc%d",x++);
  }
}
void RCC_Configuration(void)
{
RCC_DeInit();
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if( HSEStartUpStatus == SUCCESS )
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
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)
{}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 
}
void NVIC_Configuration(void)
{
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
}
void Delay(vu32 nCount)
{
for( ; nCount !=0 ; nCount-- );
}
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
return ch;
}
#ifdef  DEBUG
/*******************************************************************************
* Function Name : assert_failed
* Description   : Reports the name of the source file and the source line number
*                  where the assert_param error has occurred.
* Input         : - file: pointer to the source file name
*                  - line: assert_param error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

定时器LED灯.rar

202.98 KB, 下载次数: 743

初学啊!请多指教!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-2-9
在线时间
0 小时
 楼主| 发表于 2011-2-18 18:34:50 | 显示全部楼层
把 printf那行注释掉后
led灯闪烁就正常了
初学啊!请多指教!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-2-18 20:26:43 | 显示全部楼层
很明显,你的printf调用有问题。
你直接用我的printf和串口初始化,我相信不会有问题的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-2-9
在线时间
0 小时
 楼主| 发表于 2011-2-18 22:23:04 | 显示全部楼层
谢谢原子兄!
我不用printf,直接把printf改为fputc(x++,NULL)就正常了!为什么呢?

初学啊!请多指教!
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-2-9
在线时间
0 小时
 楼主| 发表于 2011-2-18 22:30:07 | 显示全部楼层
还有突然发现j-link仿真器不起作用了,在keil里可以进入仿真模式,但是点了运行以后 仿真器上面那个绿灯一直在闪,其他正常,但是开发板没什么反应,led灯不闪,串口也没有数据,反而目标板一上电led闪,串口有数据


问题发现了,原来是jtag不能复位目标板,每次在keil里调试状态下点复位就会出现目标板没反应的情况






这怎么办?谁知道?

初学啊!请多指教!
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-2-9
在线时间
0 小时
 楼主| 发表于 2011-2-18 22:47:02 | 显示全部楼层
难道说jtag不支持 复位?
初学啊!请多指教!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-2-19 01:12:08 | 显示全部楼层
回复【6楼】传说杨哥:
-------------------------------
支持的。
我一般不用你这种方式下载调试,而是直接在keil里面,这个我在视频里面有说的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 16:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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