stm32串口点灯

作者:number007cool

转自:http://blog.chinaunix.net/uid-21658993-id-1820023.html


串口程序:
hal.h

#ifndef HAL_H
#define HAL_H

 

//输出宏定义
//清零
#define LED1_OFF  GPIO_ResetBits(GPIOA, GPIO_Pin_8)
//置一
#define LED1_ON   GPIO_SetBits(GPIOA, GPIO_Pin_8)

#define LED2_OFF  GPIO_ResetBits(GPIOA, GPIO_Pin_7)
#define LED2_ON   GPIO_SetBits(GPIOA, GPIO_Pin_7)

#define LED3_OFF  GPIO_ResetBits(GPIOC, GPIO_Pin_7)
#define LED3_ON   GPIO_SetBits(GPIOC, GPIO_Pin_7)

#define LED4_OFF  GPIO_ResetBits(GPIOC, GPIO_Pin_5)
#define LED4_ON   GPIO_SetBits(GPIOC, GPIO_Pin_5)

#define LED5_OFF  GPIO_ResetBits(GPIOB, GPIO_Pin_9)
#define LED5_ON   GPIO_SetBits(GPIOB, GPIO_Pin_9)

#define LED6_OFF  GPIO_ResetBits(GPIOB, GPIO_Pin_8)
#define LED6_ON   GPIO_SetBits(GPIOB, GPIO_Pin_8)

#define LED7_OFF  GPIO_ResetBits(GPIOB, GPIO_Pin_5)
#define LED7_ON   GPIO_SetBits(GPIOB, GPIO_Pin_5)

#define LED8_OFF  GPIO_ResetBits(GPIOB, GPIO_Pin_0)
#define LED8_ON   GPIO_SetBits(GPIOB, GPIO_Pin_0)


//硬件初始化
extern void  ChipHalInit(void);
extern void  ChipOutHalInit(void);

//串口
extern void USART1_Putc(u8 c);
extern void USART1_Puts(char * str);
extern void USART2_Putc(u8 c);
extern void USART2_Puts(char * str);


extern u8 Uart1_Get_Flag;
extern u8 Uart1_Get_Data;
#endif

GPIO.c

#include "STM32Lib\\stm32f10x.h"

/*******************************************************************************
* Function Name  : GPIO_Configuration
* 设置PD3,PD4,PD5,PD6为键盘输入
* 设置PB0,5,8,9; PC5,7; PA7 ;PA8 为输出LED灯
*******************************************************************************/
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

 
 /*允许总线CLOCK,在使用GPIO之前必须允许相应端的时钟.
 从STM32的设计角度上说,没被允许的端将不接入时钟,也就不会耗能,
 这是STM32节能的一种技巧,*/
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

 /* PB0,5,8,9输出 */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 /* PC5,7输出*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOC, &GPIO_InitStructure);
 
 /*PA7,输出*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 /*PA8,输出*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 
}

USART.c

#include "STM32Lib\\stm32f10x.h"

/**********************************************
**串口配置函数,这里使能了两个串口,其中串口2使用了中断接收模式
**
**********************************************/
u8 Uart1_Get_Flag; //串口1接收到数据标志
u8 Uart1_Get_Data; //串口1接收的数据

void USART_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
 USART_ClockInitTypeDef USART_ClockInitStructure;
 
 //使能串口1,PA,AFIO总线
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
            RCC_APB2Periph_AFIO |
            RCC_APB2Periph_USART1 ,
            ENABLE);

    /* A9 USART1_Tx */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽输出-TX
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* A10 USART1_Rx  */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入-RX
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    USART_InitStructure.USART_BaudRate = 9600;
 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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
 USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
 USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
 USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

 USART_ClockInit(USART1, &USART_ClockInitStructure);
    USART_Init(USART1, &USART_InitStructure);
    /* Enable the USARTx */
    USART_Cmd(USART1, ENABLE);
 //串口1使用接收中断
 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
 
 
 //使能串口2时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
 
 // A2 做T2X
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // A3 做R2X
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 USART_InitStructure.USART_BaudRate = 9600;
 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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
 USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
 USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
 USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

    USART_ClockInit(USART2, &USART_ClockInitStructure);
    USART_Init(USART2, &USART_InitStructure);
   
    USART_Cmd(USART2, ENABLE);
 //串口2使用接收中断
 USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
}

void USART1_Putc(unsigned char c)
{
    USART_SendData(USART1, c);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );
}

void USART1_Puts(char * str)
{
    while(*str)
    {
        USART_SendData(USART1, *str++);
        /* Loop until the end of transmission */
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    }
}

void USART2_Putc(unsigned char c)
{
    USART_SendData(USART2, c);
    while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET );
}

void USART2_Puts(char * str)
{
    while(*str)
    {
        USART_SendData(USART2, *str++);
        /* Loop until the end of transmission */
        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    }

}

RCC.c

#include "STM32Lib\\stm32f10x.h"

RCC_ClocksTypeDef RCC_ClockFreq;

void RCC_Configuration(void)
{
 SystemInit();//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置.具体请看2_RCC

 /**************************************************
 获取RCC的信息,调试用
 请参考RCC_ClocksTypeDef结构体的内容,当时钟配置完成后,
 里面变量的值就直接反映了器件各个部分的运行频率
 ***************************************************/
 RCC_GetClocksFreq(&RCC_ClockFreq);
 
 /* 这个配置可使外部晶振停振的时候,产生一个NMI中断,不需要用的可屏蔽掉*/
 //RCC_ClockSecuritySystemCmd(ENABLE);
}

NVIC.c

#include "STM32Lib\\stm32f10x.h"


//设置所有的中断允许

void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 
 /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
 /*UART1*/
 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}

main.c

/************************************************************
**实验名称:UART
**功能:串口实验,串口1配置为接收中断
通过串口发送数字给stm32点亮相应的LED灯
**注意事项:
**作者:电子白菜
*************************************************************/

#include "STM32Lib\\stm32f10x.h"
#include "hal.h"
void delay(u32 z)
{
while(z--);
}
int main(void)
{
// u8 uart1_get_data;
 
 ChipHalInit();   //片内硬件初始化
 ChipOutHalInit();  //片外硬件初始化
    for(;;)
 {
     //串口1使用中断方式置位标志
  if(Uart1_Get_Flag)
  {
   Uart1_Get_Flag=0;
   USART1_Puts("\r\n GET CMD:");
   USART1_Putc(Uart1_Get_Data);
   USART1_Puts("\r\n");
   switch(Uart1_Get_Data)
   {
    case '1':{LED1_ON;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
    case '2':{LED2_ON;LED1_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
    case '3':{LED3_ON;LED1_OFF;LED2_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
    case '4':{LED4_ON;LED1_OFF;LED2_OFF;LED3_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
    case '5':{LED5_ON;LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
    case '6':{LED6_ON;LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED7_OFF;LED8_OFF;} break;
    case '7':{LED7_ON;LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED8_OFF;} break;
    case '8':{LED8_ON;LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;} break;
    case '0':{LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;} break;
   }
  }
  //USART1_Puts("Test Ok!\r\n");
  //delay(3000000);
 }
}

stm32f10x_it.c

/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
* stm32f10x_it.c
* 所有中断响应函数,一般如果中断比较简易,则直接在此编写,否则
* 可调用HAL模块中各自对应的处理函数处理中断。
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "STM32Lib\\stm32f10x.h"

/* Private typedef -----------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
#define countof(a)   (sizeof(a) / sizeof(*(a)))

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
* Function Name  : NMI_Handler
* Description    : This function handles NMI exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NMI_Handler(void)
{
 
}

/*******************************************************************************
* Function Name  : HardFault_Handler
* Description    : This function handles Hard Fault exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

/*******************************************************************************
* Function Name  : MemManage_Handler
* Description    : This function handles Memory Manage exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

/*******************************************************************************
* Function Name  : BusFault_Handler
* Description    : This function handles Bus Fault exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void BusFault_Handler(void)
{
  /* Go to infinite loop when Bus Fault exception occurs */
  while (1)
  {
  }
}

/*******************************************************************************
* Function Name  : UsageFaultException
* Description    : This function handles Usage Fault exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void UsageFault_Handler(void)
{
  /* Go to infinite loop when Usage Fault exception occurs */
  while (1)
  {
  }
}

/*******************************************************************************
* Function Name  : SVC_Handler
* Description    : This function handles SVCall exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SVC_Handler(void)
{
}

/*******************************************************************************
* Function Name  : DebugMon_Handler
* Description    : This function handles Debug Monitor exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DebugMon_Handler(void)
{
}

/*******************************************************************************
* Function Name  : PendSVC
* Description    : This function handles PendSVC exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void PendSV_Handler(void)
{
}

/*******************************************************************************
* Function Name  : SysTickHandler
* Description    :
*******************************************************************************/
void SysTick_Handler(void)
{

}

/*******************************************************************************
* Function Name  : WWDG_IRQHandler
* Description    : This function handles WWDG interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void WWDG_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : PVD_IRQHandler
* Description    : This function handles PVD interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void PVD_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TAMPER_IRQHandler
* Description    : This function handles Tamper interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TAMPER_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : RTC_IRQHandler  
* Description    : RTC中断中,
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RTC_IRQHandler(void)
{

}

/*******************************************************************************
* Function Name  : FLASH_IRQHandler
* Description    : This function handles Flash interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void FLASH_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : RCC_IRQHandler
* Description    : This function handles RCC interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI0_IRQHandler
* Description    : This function handles External interrupt Line 0 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI0_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI1_IRQHandler
* Description    : This function handles External interrupt Line 1 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI1_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI2_IRQHandler
* Description    : This function handles External interrupt Line 2 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI2_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI3_IRQHandler
* Description    : This function handles External interrupt Line 3 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI3_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI4_IRQHandler
* Description    : This function handles External interrupt Line 4 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI4_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel1_IRQHandler
* Description    : This function handles DMA Stream 1 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel1_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel2_IRQHandler
* Description    : This function handles DMA Stream 2 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel2_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel3_IRQHandler
* Description    : This function handles DMA Stream 3 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel3_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel4_IRQHandler
* Description    : This function handles DMA Stream 4 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel4_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel5_IRQHandler
* Description    : This function handles DMA Stream 5 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel5_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel6_IRQHandler
* Description    : This function handles DMA Stream 6 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel6_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : DMAChannel7_IRQHandler
* Description    : This function handles DMA Stream 7 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA1_Channel7_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : ADC_IRQHandler
* Description    : This function handles ADC global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void ADC1_2_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : USB_HP_CAN_TX_IRQHandler
* Description    : This function handles USB High Priority or CAN TX interrupts
*                  requests.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USB_HP_CAN1_TX_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : USB_LP_CAN_RX0_IRQHandler
* Description    : This function handles USB Low Priority or CAN RX0 interrupts
*                  requests.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USB_LP_CAN1_RX0_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : CAN_RX1_IRQHandler
* Description    : This function handles CAN RX1 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CAN1_RX1_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : CAN_SCE_IRQHandler
* Description    : This function handles CAN SCE interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CAN1_SCE_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI9_5_IRQHandler
* Description    : This function handles External lines 9 to 5 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI9_5_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM1_BRK_IRQHandler
* Description    : This function handles TIM1 Break interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM1_BRK_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM1_UP_IRQHandler
* Description    : This function handles TIM1 overflow and update interrupt
*                  request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM1_UP_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM1_TRG_COM_IRQHandler
* Description    : This function handles TIM1 Trigger and commutation interrupts
*                  requests.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM1_TRG_COM_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM1_CC_IRQHandler
* Description    : This function handles TIM1 capture compare interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM1_CC_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM2_IRQHandler TIM2中断
* Description    : This function handles TIM2 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/

void TIM2_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM3_IRQHandler
* Description    : This function handles TIM3 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM3_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : TIM4_IRQHandler
* Description    : This function handles TIM4 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM4_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : I2C1_EV_IRQHandler
* Description    : This function handles I2C1 Event interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C1_EV_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : I2C1_ER_IRQHandler
* Description    : This function handles I2C1 Error interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C1_ER_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : I2C2_EV_IRQHandler
* Description    : This function handles I2C2 Event interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C2_EV_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : I2C2_ER_IRQHandler
* Description    : This function handles I2C2 Error interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C2_ER_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : SPI1_IRQHandler
* Description    : This function handles SPI1 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SPI1_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : SPI2_IRQHandler
* Description    : This function handles SPI2 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SPI2_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : USART2_IRQHandler
* Description    : This function handles USART2 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/


void USART2_IRQHandler(void)
{
    /*
 //接收中断
 if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
 {
  USART_ClearITPendingBit(USART1,USART_IT_RXNE);
  Uart1_Get_Data=USART_ReceiveData(USART1);
  Uart1_Get_Flag=1;
 }
 
 //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
 {
  USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
  USART_ReceiveData(USART1);    //读DR
 }
 */
}

/*******************************************************************************
* Function Name  : USART1_IRQHandler
* Description    : This function handles USART1 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
extern u8 Uart1_Get_Flag;
extern u8 Uart1_Get_Data;

void USART1_IRQHandler(void)
{
 //接收中断
 if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
 {
  USART_ClearITPendingBit(USART1,USART_IT_RXNE);
  Uart1_Get_Data=USART_ReceiveData(USART1);
  Uart1_Get_Flag=1;
 }
 
 //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
 {
  USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
  USART_ReceiveData(USART1);    //读DR
 }
}

/*******************************************************************************
* Function Name  : USART3_IRQHandler
* Description    : This function handles USART3 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USART3_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : EXTI15_10_IRQHandler
* Description    : This function handles External lines 15 to 10 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI15_10_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : RTCAlarm_IRQHandler
* Description    : This function handles RTC Alarm interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RTCAlarm_IRQHandler(void)
{
}

/*******************************************************************************
* Function Name  : USBWakeUp_IRQHandler
* Description    : This function handles USB WakeUp interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USBWakeUp_IRQHandler(void)
{
}

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,您需要使用STM32串口接收功能来控制点灯。 首先,您需要配置STM32串口接收功能。您可以通过调用HAL库中的函数来实现。例如,如果您使用的是USART2,可以使用以下代码进行初始化: ``` /* USART2 init function */ void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); } } ``` 在这个例子中,我们将USART2的模式设置为UART_MODE_RX,这样它就可以接收数据了。 接下来,您需要编写一个函数来读取接收到的数据并控制LED灯的状态。例如,以下代码可以实现这个功能: ``` void USART2_IRQHandler(void) { uint8_t data = 0; if(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET) { __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE); HAL_UART_Receive(&huart2, &data, 1, 1000); // 读取接收到的数据 if(data == '1') // 如果接收到的数据是字符'1' { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); // 控制LED灯亮起 } else if(data == '0') // 如果接收到的数据是字符'0' { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // 控制LED灯熄灭 } } } ``` 在这个例子中,我们使用了HAL库中的函数来读取接收到的数据,并根据接收到的数据控制LED灯的状态。当接收到字符'1'时,LED灯亮起;当接收到字符'0'时,LED灯熄灭。 最后,您需要在main函数中启用中断功能,以便可以通过串口接收数据并控制LED灯的状态。例如,以下代码可以实现这个功能: ``` int main(void) { /* ... */ MX_USART2_UART_Init(); HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); while (1) { /* ... */ } } ``` 在这个例子中,我们使用了HAL库中的函数来启用USART2的中断功能,并设置了中断的优先级。然后,在main函数的无限循环中,您可以执行其他任务或等待接收到的数据。 希望这个例子可以帮助您了解如何使用STM32串口接收功能控制LED灯的状态。 ### 回答2: 要实现stm32串口接收点灯的功能,需要进行以下步骤: 1. 首先,需要在stm32的开发环境中进行串口的初始化配置。设置串口的波特率、数据位、停止位和校验位等参数,并使能串口的接收中断。 2. 接着,编写一个中断服务函数,用于处理串口接收中断。在该函数中,可以通过查询接收寄存器的状态位来判断是否接收到了数据,如果接收到数据,则可以读取接收寄存器的值。 3. 在中断服务函数中,可以根据接收到的数据来控制点灯的逻辑。比如,可以使用if语句或switch语句来根据接收到的特定字符或指令来控制点灯的开关。 4. 在主函数中,需要开启全局中断使能,以使得串口接收中断能够正常触发,从而进入中断服务函数进行处理。 5. 在主函数的无限循环中,可以添加其他逻辑或功能代码。比如,可以通过串口发送数据来触发串口接收中断从而控制点灯的开关。 总结起来,实现stm32串口接收点灯的功能,即根据串口接收到的特定字符或指令来控制点灯,需要进行串口初始化配置、编写中断服务函数、开启中断使能等操作。这样,当串口接收到数据时,会触发中断服务函数进行处理,从而实现点灯控制的功能。 ### 回答3: 要在STM32上实现串口接收点灯的功能,首先需要配置串口以及GPIO。 首先,我们需要在STM32的引脚配置中选择合适的引脚作为串口接收引脚,并确保STM32串口功能被使能。然后,我们需要配置串口的波特率、数据位、停止位以及奇偶校验等参数。为了简化操作,我们可以使用STM32提供的库函数进行配置。 接下来,我们需要配置用于控制灯的GPIO引脚。选择合适的引脚并设置为输出模式。然后,我们可以使用库函数来控制GPIO引脚的状态,例如设置为高电平点亮灯,或者设置为低电平熄灭灯。 在代码中,我们可以使用中断的方式接收串口数据。当有数据接收到时,中断将触发,我们可以在中断处理函数中读取接收到的数据。在读取数据后,我们可以根据接收到的数据来控制灯的状态。例如,当接收到字符'A'时,点亮灯;当接收到字符'B'时,熄灭灯。 最后,我们需要在主循环中启用中断并保持程序的运行。当有数据接收到时,中断将触发并处理接收到的数据。 综上所述,我们可以通过配置串口和GPIO以及使用中断的方式实现STM32串口接收点灯的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值