OpenEdv-开源电子网

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

我想实现按下键 让灯取反,并同时给电脑发送数据的程序,但是不知道为啥成功不了。好心人和技术牛人帮我看看嘛。

[复制链接]

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-5-7 09:51:09 | 显示全部楼层 |阅读模式

#include<stm32f10x_lib.h>
#include "sys.h"
#define led PAout(8)
#define int1 PAin(0)

void init_led(void);
void init_usart(void);
void init_PA1_intd(void);
void delay(u16);
u8 num,flag;

int main(void)
{
 num = 0;
 init_led();
 init_usart();

 init_PA1_intd();

 while(1)
 {
  if (flag == 1)
  {
   flag = 0;
   USART1->DR = num;
   while((USART1->SR & (1 << 6)) == 0);
   USART1->SR &= ~(1 << 6);
  }
 }
}

void init_led(void)
{
 RCC->APB2ENR |= 1 << 2;
 GPIOA->CRH &= 0xfffffff0;
 GPIOA->CRH |= 0x00000003;
}

void init_usart(void)
{
 //使能接收发送引脚时钟和串口时钟  
 RCC->APB2ENR |= 1 << 14 | 1 << 2;
 GPIOA->CRH &= 0xfffff000;
 GPIOA->CRH |= 0x000008B3;
 //复位和清除复位
 RCC->APB2RSTR |= 1 << 14;
 RCC->APB2RSTR &= ~(1 << 14);      
 //设置波特率和配置USART1控制寄存器
 USART1->BRR = ((8 * 1000000)/(16 * 9600)) << 4;
 USART1->CR1 = (1 << 13) | (1 << 8) | (1 << 5) | (1 << 3) | (1 << 2);
 //载入中断
 MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
}

void delay(u16 ms)
{
 u16 r1, r2;
 for (r1 = 0; r1 < ms; r1++)
  for (r2 = 0; r2 < 1150; r2++);
}

void init_PA1_intd(void)
{
 RCC->APB2ENR |= 1 << 2;
 GPIOA->CRL &= 0xfffffff0;
 GPIOA->CRL |= 0x00000008;
// GPIOA->ODR = 1 << 0;

 RCC->APB2ENR |= 1 << 1;
 AFIO->EXTICR[0] = 0;

 EXTI->IMR |= 1 << 0;
 EXTI->EMR |= 1 << 0;
 EXTI->FTSR |= 1 << 0;

 MY_NVIC_Init(2, 2, EXTI0_IRQChannel, 2);
}

void EXTI0_IRQHandler(void)

 if(int1 == 0)
 {
  delay(5);
  if(int1 == 0)
  {
   while(!int1);
   led = ~led;
   num++;
   flag = 1;
  }
 }
}

 

啊 用JTAG都可以实现,但是全速运行就不能实现、、

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-5-7 11:16:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-5-7 15:28:54 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
额  什么是不明确呀?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-5-7 16:54:23 | 显示全部楼层
回复【3楼】lsj9383:
---------------------------------
都不知道你的现象...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-5-7 19:16:13 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
额 呵呵 忘了说啦,就是灯可以取反,但是电脑没有接收到单片机发出的信息、、、
然后如果用个while 一直发送的话,电脑有可以正常接收到信息,就是说usart和外部中断都是正常工作的、,但是合在一起就不能工作了。但是我用jtag仿真的时候一步一步地走 却能够走到发送那里,并且能够执行发送信息的指令,电脑也收到了信息,不过当我全速运行的时候,,电脑就不能接收到信息、奇怪的很
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-5-8 00:10:11 | 显示全部楼层
慢慢查吧.
看看是不是按键多次触发.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 00:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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