OpenEdv-开源电子网

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

stm32f103C8T6配置了串口,但为啥串口调试接收不到数据呢,各位,帮帮小弟

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-1-26
在线时间
6 小时
发表于 2021-1-26 09:32:10 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"

void My_USART1_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStrue;
        USART_InitTypeDef USART_InitStrue;  //定义变量
    NVIC_InitTypeDef  NVIC_InitStrue;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);

       
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;       
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;         //端口模式设置
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;       
       
GPIO_Init(GPIOA,&GPIO_InitStrue);              //初始化IO口
       
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;       
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;       
       
GPIO_Init(GPIOA,&GPIO_InitStrue);          //初始化IO口

USART_InitStrue.USART_BaudRate=115200;     //波特率
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;       
USART_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStrue.USART_Parity=USART_Parity_No;       //奇偶校验
USART_InitStrue.USART_StopBits=USART_StopBits_1;    //停止位
USART_InitStrue.USART_WordLength=USART_WordLength_8b;         
       
USART_Init(USART1,&USART_InitStrue);      //串口参数初始化       


USART_Cmd(USART1,ENABLE);                          //使能串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);       //打开接收中断

NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;            //支出通道
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;               //开启中断通道
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;     //设置抢占优先级
NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;             //设置子优先级


NVIC_Init(&NVIC_InitStrue);                                     //设置优先级

}

void USART1_IRQHandler(void)
{
        u8 res;
  if(USART_GetITStatus(USART1,USART_IT_RXNE))
  {
        res=USART_ReceiveData(USART1);     //读取串口1数据   
        USART_SendData(USART1,res);        //发送  
  }


}       


int main(void)
{
         
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //中断优先级分组
        My_USART1_Init();
   while(1);         
         
         
}         


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

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3627
金钱
3627
注册时间
2019-8-14
在线时间
1054 小时
发表于 2021-1-26 12:46:58 | 显示全部楼层
回复

使用道具 举报

3

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2019-11-6
在线时间
74 小时
发表于 2021-1-26 15:53:50 | 显示全部楼层
不用开AFIO,进中断后要清中断标志
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2021-1-26 15:55:52 | 显示全部楼层
T932401514 发表于 2021-1-26 15:53
不用开AFIO,进中断后要清中断标志

有些中断不需要手动清标志位的
回复

使用道具 举报

3

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2019-11-6
在线时间
74 小时
发表于 2021-1-26 16:03:04 | 显示全部楼层
a5820736 发表于 2021-1-26 15:55
有些中断不需要手动清标志位的

好吧,我用串口现在是进了中断后都会把清标志,请问一下那些中断或者情况下不用清,谢谢了
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2021-1-27 08:00:07 | 显示全部楼层
T932401514 发表于 2021-1-26 16:03
好吧,我用串口现在是进了中断后都会把清标志,请问一下那些中断或者情况下不用清,谢谢了

具体要看手册,像串口接收中断就可以通过读接收数据寄存器清中断
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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