估计是你的串口时钟没有初始化,所以编译正确也没有效果
看看我的初始化
/* 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已接到串口上了,你又问能不能正常使用,我有些不明白你到底是什么意思
恩!你是什么编译环境!??
如果是keil4的话有一个地方需要改动一下!
LZ程序在哪里?我帮你看看。LS那个发程序的是不是你?如果是你的话,你的程序错在没有中断优先级配置,那里面有个中断使能,使能了你才能进中断。