OpenEdv-开源电子网

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

STM32串口可以Keil仿真,但是下载到板子中没反应。

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-4-16
在线时间
0 小时
发表于 2014-4-16 09:05:29 | 显示全部楼层 |阅读模式

用班子自带的程序可以,但是用下面的程序就只能Keil仿真了。

寄存器方式:

int main()
{
float Div;
u16 M,F,BRR;
u32 baud;
unsigned long cnt;
GPIO_InitTypeDef GPIO_InitStructure;
/*配置串口1输出管脚*/
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);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
USART1 ->CR1 |= 1 << 13;
USART1 ->CR1 &= ~(1<<12);
USART1 ->CR2 &= ~(3<<12);
USART1 ->CR1 |= 1<<3;
baud = 9600;
Div = (float)72 * 1000 * 1000 / (baud * 16);
M = Div;
F = (Div - M) * 16;
BRR = (M << 4) + F;
USART1 ->BRR = BRR;
USART1 ->DR = 'A';
while(cnt++ < 30)
{
while(0 == USART1 ->SR & 1<<6);
USART1 ->DR = 'A' + cnt;
}
while(1);
}


库函数方式:
int main()
{
u8 data;
u16 cnt = 0;
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/*配置串口1输出管脚*/
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);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
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_Tx | USART_Mode_Rx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
data = 'A';
while(cnt++ < 30)
{
USART_SendData(USART1,data);
data++;
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
}
}

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-16 10:31:35 | 显示全部楼层
先打开外设时钟再进行模式配置,看你这程序好像不对耶
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-4-16
在线时间
0 小时
 楼主| 发表于 2014-4-17 08:34:53 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
一语道破天机哈!
这个代码问题很大,不仅是时钟函数位置放错了还缺了一个GPIOA时钟函数,呃呃呃……这个还是某培训机构滴“权威”视频呢,害我折腾了好几天,汗啦!
感谢党,感谢人民,感谢原子,感谢Openedv,感谢……,噢~耶~~
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-17 08:36:35 | 显示全部楼层
回复【3楼】灰泥鳅:
---------------------------------
找到问题了,这么兴奋呀


什么培训机构这么牛叉,这样的程序也敢拿出来教人???
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-4-19
在线时间
0 小时
发表于 2014-6-1 14:35:25 | 显示全部楼层
int main()
{
u32 i;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
DELAY_Init(72);
usart_Init(9600);
for(i=0;i<20;i++)
{
USART_SendData(USART1,'B');
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) ==RESET)
;
}


void usart_Init(u32 BaudRate)
{
GPIO_InitTypeDef  GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;

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);

USART_InitStructure.USART_BaudRate =  BaudRate;
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_Tx | USART_Mode_Rx;

USART_Init(USART1,&USART_InitStructure);

USART_Cmd(USART1,ENABLE);
}
回复 支持 反对

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-4-19
在线时间
0 小时
发表于 2014-6-1 14:36:43 | 显示全部楼层
楼主我的跟你的一样啊。。也是可以仿真。。单为什么在串口助手上看不到内容
回复 支持 反对

使用道具 举报

智能时代 该用户已被删除
发表于 2015-7-13 16:49:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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