关于stm32单片机的串口调试问题

2025-02-27 09:17:34
推荐回答(3个)
回答1:

估计是你的串口时钟没有初始化,所以编译正确也没有效果

看看我的初始化

/* Enable USART1 and GPIOA clock */
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_USART1 
   | RCC_APB2Periph_GPIOA
| RCC_APB2Periph_AFIO, 
ENABLE);

/* Enable USART2 and GPIOA clock */
// 第2个USART为PA2 PA3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

// >>>>>是否也应该为USART3也设定呢?
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
   RCC_APB2PeriphClockCmd(
  RCC_APB2Periph_GPIOB 
| RCC_APB2Periph_AFIO, ENABLE);


// 初始化UART4端口时钟、复用端口
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);
   RCC_APB2PeriphClockCmd(
  RCC_APB2Periph_GPIOC 
| RCC_APB2Periph_AFIO, ENABLE);

对比你的USART1端口的

	RCC_APB2PeriphClockCmd(
RCC_APB2Periph_USART1|
RCC_APB2Periph_GPIOA,ENABLE);

 阿莫上有明确的一个解释:

1.AFIO是引脚复用时钟,只要用到引脚的第二功能,都需要打开,你说不打开这个时钟也能用,我有些不太相信,可能是你程序里别的地方有打开
2.用USART1的时候PA9,PA10已接到串口上了,你又问能不能正常使用,我有些不明白你到底是什么意思

回答2:

恩!你是什么编译环境!??
如果是keil4的话有一个地方需要改动一下!

回答3:

LZ程序在哪里?我帮你看看。LS那个发程序的是不是你?如果是你的话,你的程序错在没有中断优先级配置,那里面有个中断使能,使能了你才能进中断。