OpenEdv-开源电子网

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

求助!! STM32 USART的发送中断

[复制链接]

3

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-29
在线时间
5 小时
发表于 2016-1-16 16:30:03 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 umbreLLa 于 2016-1-16 16:33 编辑

我想用32的USART发送一点传感器数据,想发得有序一点儿,于是想到发送中断,然后就设置了串口的TC中断。
这是主程序,里面让灯一直闪
int main(void)
{
SystemInit();
delay_init(72);   
NVIC_Configuration();
uart_init(9600);
LED_Init();
while(1)
{
  delay_ms(1000);
  LED0=!LED0;
}  
主要是这个
void uart_init(u32 bound)
{
  GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
//USART1_TX   PA.9
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);

//USART1_RX   PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);  
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
   
USART_InitStructure.USART_BaudRate = bound;
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_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
// USART1->CR1 |= 0x40;
//  USART_ClearFlag(USART1, USART_FLAG_RXNE);
//  USART_ClearFlag(USART1, USART_FLAG_TC);

USART_Cmd(USART1, ENABLE);
}
单独开启RXNE中断没事,一切都很正常,只要是开了TC中断,我的整个程序就死了,连灯都不会闪了,仿真我也没看出什么来,不知道怎么回事,是我设置有问题吗
而且不只是TC,连TXE都是这样。
有人遇到过这种情况吗???
请各位大神们帮看看吧!!
原子哥你在哪? T-T


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

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-1-16 17:00:39 | 显示全部楼层
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-29
在线时间
5 小时
 楼主| 发表于 2016-1-16 17:20:27 | 显示全部楼层
xuande 发表于 2016-1-16 17:00
看看死在哪里了。

仿真没什么问题。。。。程序顺顺当当从头到尾,然后在while(1)里
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2016-1-16 23:20:56 | 显示全部楼层
单独开TC可以吗
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2078
金钱
2078
注册时间
2014-12-19
在线时间
710 小时
发表于 2016-1-16 23:26:42 来自手机 | 显示全部楼层
估计你的中断处理函数有问题,但你没有贴出来
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-4-16
在线时间
5 小时
发表于 2016-1-17 17:12:45 来自手机 | 显示全部楼层
TC中断是有清标志?
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-29
在线时间
5 小时
 楼主| 发表于 2016-1-19 16:57:37 | 显示全部楼层

也不行,只要是是能TC或者TXE中断就没用了
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-29
在线时间
5 小时
 楼主| 发表于 2016-1-19 16:59:19 | 显示全部楼层
erickwzp 发表于 2016-1-17 17:12
TC中断是有清标志?

清除标志也没用。。
不知道为什么一开TC或者TXE就不行了,不知道为什么
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-29
在线时间
5 小时
 楼主| 发表于 2016-1-19 17:12:05 | 显示全部楼层
lvehe 发表于 2016-1-16 23:26
估计你的中断处理函数有问题,但你没有贴出来

void USART1_IRQHandler(void)            
{
        if(USART_GetITStatus(USART1, USART_IT_TC) == SET)  
        {
           printf("TC\n");
        }
        USART_ClearFlag(USART1, USART_FLAG_TC);
}

中断函数即使是空的也不行,只要开了TC或者TXE以后,连主程序while都没用了,这跟硬件有关吗?
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2078
金钱
2078
注册时间
2014-12-19
在线时间
710 小时
发表于 2016-1-20 07:14:53 来自手机 | 显示全部楼层
中断里面不要用printf,然后试试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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