加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建

(2015-05-02 16:23:11)
标签:

printf

stm32

stm32f103

分类: STM32
对于stm32103软件仿真printf,步骤主要如下:
1.首先配置keil的工程环境:
(1)点击图1中红框的标示设置
http://s12/mw690/0024GkFIgy6RXak5Y2Dab&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图1
(2)Device选项卡设置,图2
http://s4/mw690/0024GkFIgy6RXapYDDBe3&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图2
(3)Target选项卡,图3
http://s9/mw690/0024GkFIgy6RXavqWqk68&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图3
(4)Output选项卡,如图4,此处主要是为以后的硬件仿真准备,图4
http://s3/mw690/0024GkFIgy6RXaFdL0ef2&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图4
(5)C/C++选项卡,图5
http://s6/mw690/0024GkFIgy6RXaIWx7f35&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图5
(6)Debug选项卡,软件仿真必须设置正确的dll,图6
http://s13/mw690/0024GkFIgy6RXaN3w0A9c&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图6

2. 我的工程项目文件(仅供参考)
(1)项目结构,图7
http://s15/mw690/0024GkFIgy6RXbNRJ3Ede&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图7
(2)项目中文件结构,点击图8中的红框按钮,出现对话框如图9所示。
http://s5/mw690/0024GkFIgy6RXc2fj8wc4&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图8
http://s15/mw690/0024GkFIgy6RXc2Rjieee&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图9

3. printf调用实现程序编写
(1)首先对系统时钟进行设置
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}

(2)GPIO设置,PA9--TX, PA10--RX
void GPIO_Configuration(void)
{
GPIO_InitTypeDef stGpioInitTypeDef;
//TX
stGpioInitTypeDef.GPIO_Pin = GPIO_Pin_9;
stGpioInitTypeDef.GPIO_Speed = GPIO_Speed_50MHz;
stGpioInitTypeDef.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &stGpioInitTypeDef);
//RX
stGpioInitTypeDef.GPIO_Pin = GPIO_Pin_10;
stGpioInitTypeDef.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &stGpioInitTypeDef);
}

(3)我们使用USART1对printf进行仿真,初始化如下
void USART_Configuration(void)
{// Set port, line and mode etc
USART_InitTypeDef stUSART_InitTypeStruct;
stUSART_InitTypeStruct.USART_BaudRate = 9600;
stUSART_InitTypeStruct.USART_WordLength = USART_WordLength_8b;
stUSART_InitTypeStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
stUSART_InitTypeStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
stUSART_InitTypeStruct.USART_StopBits = USART_StopBits_1;
stUSART_InitTypeStruct.USART_Parity = USART_Parity_No;
USART_Init(USART1, &stUSART_InitTypeStruct);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
}

(4)由于是中断所以要配置中断的优先级等
void NVIC_Configuration(void)
{// Set Group and Priority
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_SetPriorityGrouping(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
(5)配置完以上之后需要配置中断函数,在文件stm32f10x_it.c中,添加如下内容:
void USART1_IRQHandler(void)
{
//get receive it
   if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_SendData(USART1, USART_ReceiveData(USART1) );
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}
(6)好了,需要的函数基本都完成了,现在开始写main中的内容了,对了写main中内容之前要重新实现一下fputc函数,此函数可以写在main之前。
int fputc(int ch, FILE *fp)
{
USART_SendData(USART1, (u8)ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)== RESET );
return ch;
}
现在真正写main中的实现:
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
NVIC_Configuration();
while(1)
{
printf("打印输出测试!\n");
  //延迟
 delay_ms(1000);  
}
}
(7)对该工程进行编译,点击图10红框中的按钮,然后再点击运行,如图11。
http://s3/mw690/0024GkFIgy6RXdpk8Kee2&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图10
http://s1/mw690/0024GkFIgy6RXdv0meQ80&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图11

(8)点击"View"菜单中的"Serial Windows"-->"UART#1",如图12所示,printf结果输出如图13所示, "打印输出测试!"会不断的循环输出。
http://s12/mw690/0024GkFIgy6RXe6x0T12b&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图12

http://s5/mw690/0024GkFIgy6RXe6Wdww24&690v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" TITLE="Keil v5 仿真stm32f103 软件仿真printf,包含了环境的搭建" />
图13


终于写完了。






0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有