在学习407串口通信,按照原子哥的串口教程一步一步学习(串口助手发送一个数据,单片机接受到后,再发送回电脑),程序编写没有错误。板子用的是407最小系统办,串口用的是CH340G转TTL 模块,用STLINK下载的。串口助手配置和程序一样,但是下载后实现不了. 
USART.C程序 
#include "stm32f4xx.h" 
#include "USART.H" 
#include "LED.H" 
 
void my_uart_init(u16 bound) 
{ 
  GPIO_InitTypeDef   GPIO_InitStruct; 
  USART_InitTypeDef  USART_InitStruct; 
  NVIC_InitTypeDef   NVIC_InitStruct; 
 
    //外设时钟使能函数。这两个函数在RCC.H头文件中定义了 
    RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE );//使能USART1时钟 
    RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA,ENABLE );//使能GPIOA时钟 
 
      //复用映射设置。USART1所使用的PA9、PA10进行复用映射 
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//USART引脚PA9复用映射 
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//USART引脚PA10复用映射 
 
        //GPIOA9,10初始化 
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//初始化PA9、PA10 
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;//复用模式 
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP; 
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;//上拉 
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;//速度100MHz 
        GPIO_Init(GPIOA,&GPIO_InitStruct);//GPIOA初始化 
           
 
          //USART初始化 
          USART_InitStruct.USART_BaudRate=bound;//设置波特率 
          USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流控制 
          USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//打开发送和接收 
          USART_InitStruct.USART_Parity=USART_Parity_No;//无奇偶校验 
          USART_InitStruct.USART_StopBits=USART_StopBits_1;//一个停止位 
          USART_InitStruct.USART_WordLength=USART_WordLength_8b;//数据宽度为8个字节,如果有奇偶校验要设置为9个字节 
          //USART_InitStruct.USART_WordLength=USART_WordLength_9b;//数据宽度为9个字节,有奇偶校验时要用此函数 
          USART_Init(USART1,&USART_InitStruct); 
 
            //中断使能 
            USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//串口中断使能,串口1、接收非空、使能 
 
              //中断初始化 
              //使能中断时,1、需要在主函数中调用中断分组函数"NVIC_PriorityGroupConfig()" 
              //            2、编写中断服务函数,调用函数"USARTx_IRQHandler()" 
              NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;//在顶层头文件“stm32f4xx”中找相应的通道 
              NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; 
              NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; 
              NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; 
              NVIC_Init(&NVIC_InitStruct); //初始化中断 
 
                //USART串口使能 
                USART_Cmd(USART1,ENABLE); 
              }  
 
 
//中断服务函数,在启动文件中 
void USARTx_IRQHandler(void) 
{ 
  if(USART_GetITStatus(USART1,USART_IT_RXNE)) 
  { 
                   u8 RES;                         //定义串口数据变量 
      RES=USART_ReceiveData(USART1);//从串口接收数据 
      USART_SendData(USART1,RES);   //把从串口接收到的数据发送出去 
  } 
 
} 
USART.H程序 
 
 
 
#ifndef __USART_H 
#define __USART_H 
#include "stdio.h"         
#include "stm32f4xx_conf.h" 
#include "sys.h"  
 
extern u16 bound; 
extern void my_uart_init(u16 bound); 
#endif 
 
 
main.c程序 
#include "stm32f4xx.h" 
#include "USART.H" 
#include "delay.h" 
 
int main(void) 
{ 
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组,此函数在“misc.h"中 
        my_uart_init(115200); 
} 
 
 
KEIL该配置的都配置了,请各位大神帮帮忙,找一下问题,谢谢! |   
     
  
 |