打印
[STM8]

【转】STM8L101F3P6查询发送中断接收程序实例

[复制链接]
799|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
风萧寒|  楼主 | 2016-11-1 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



[cpp] view plain copy


  • /******************************Copyright (c)***********************************/  
  • /*                                                                            */  
  • /*                             老李电子工作                                   */  
  • /*                                                                            */  
  • /*------------------------------File Info-------------------------------------*/  
  • /* File name:           main.c                                                */  
  • /* Last modified Date:  2014-06-23                                            */  
  • /* Last Version:        1.0                                                   */  
  • /* Descriptions:        STM8L103F3P6,内部时钟,16MHz,串口查询发送中断接收。  */  
  • /*                      本程序模拟一小段协议的解析,接收到报文0xc2,0x01,0x7b后*/  
  • /*                      返回报文0xd2,0x64,0x21                                */  
  • /*                      查询发送,中断接收                                    */  
  • /*                                                                            */  
  • /* 硬件连接:                                                                  */  
  • /*                      TX----PC3                                             */  
  • /*                      RX----PC2                                             */  
  • /*                                                                            */  
  • /*----------------------------------------------------------------------------*/  
  • /* Created by:          Li Xiang                                              */  
  • /* Created date:        2014-06-19                                            */  
  • /* Version:             1.0                                                   */  
  • /* Descriptions:        无                                                    */  
  • /*                                                                            */  
  • /******************************************************************************/  
  •   
  • /* Includes ------------------------------------------------------------------*/  
  • #include "stm8l10x.h"  
  • #include "stm8l10x_usart.h"  
  • /* Private typedef -----------------------------------------------------------*/  
  • /* Private define ------------------------------------------------------------*/  
  • #define POWER_BD            GPIO_Pin_0  
  • #define POWER_BT            GPIO_Pin_1  
  • #define MSEL                GPIO_Pin_2  
  • #define NRESET              GPIO_Pin_3  
  • #define BD_NRESET           GPIO_Pin_4  
  • #define RESETB              GPIO_Pin_5  
  • #define SCL2                GPIO_Pin_6  
  • #define SDA2                GPIO_Pin_7  
  •   
  • #define SDA                 GPIO_Pin_0  
  • #define SCL                 GPIO_Pin_1  
  • #define SCREEN_CTRL         GPIO_Pin_4  
  •   
  • #define POWER_WIFI          GPIO_Pin_0  
  • /* Private macro -------------------------------------------------------------*/  
  • /* Private variables ---------------------------------------------------------*/  
  • uint8_t RXBUF[64];  
  • uint8_t rxcounter=0;  
  • uint8_t rxflag=0;  
  • /* Private function prototypes -----------------------------------------------*/  
  • static void BoardInit(void);  
  • static void CLK_Init(void);  
  • static void GPIO_Init_my(void);  
  • static void USART_Config(void);  
  • void USART_SendByte(uint8_t data);  
  • void USART_SendString(uint8_t* Data,uint16_t len);  
  • void Delay_ms(uint32_t nCount);  
  • /* Private functions ---------------------------------------------------------*/  
  •   
  • /******************************************************************************/  
  • /* Function name:        main                                                 */  
  • /* Descriptions:        主函数                                                */  
  • /* input parameters:    无                                                    */  
  • /* output parameters:   无                                                    */  
  • /* Returned value:      无                                                    */  
  • /******************************************************************************/  
  • void main(void)  
  • {  
  •     uint8_t i=0;  
  •       
  •     BoardInit();  
  •       
  •     enableInterrupts();      
  •       
  •     while (1){  
  •         if(rxflag==1){  
  •             switch(RXBUF[0]){  
  •                 case 0xc1:  
  •                     break;  
  •                 case 0xc2:  
  •                     if( RXBUF[1]==0x01 && RXBUF[2]==0x7b ){  
  •                         for(i=0;i<64;i++){  
  •                             RXBUF=0;  
  •                         }  
  •                         rxcounter=0;  
  •                         rxflag=0;  
  •                           
  •                         USART_SendByte(0xD2);  
  •                         USART_SendByte(0x64);  
  •                         USART_SendByte(0x21);  
  •                     }  
  •                     break;  
  •                 case 0xc3:  
  •                     break;  
  •             }  
  •         }  
  •     }  
  • }  
  •   
  • /******************************************************************************/  
  • /* Function name:        BoardInit                                            */  
  • /* Descriptions:        主函数                                                */  
  • /* input parameters:    无                                                    */  
  • /* output parameters:   无                                                    */  
  • /* Returned value:      无                                                    */  
  • /******************************************************************************/  
  • static void BoardInit(void)  
  • {  
  •     CLK_Init();      
  •     GPIO_Init_my();  
  •     USART_Config();  
  • }  


沙发
风萧寒|  楼主 | 2016-11-1 20:27 | 只看该作者
  
/******************************************************************************/  
/* Function name:        CLK_Init                                             */  
/* Descriptions:        时钟初始化函数                                        */  
/* input parameters:    无                                                    */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
static void CLK_Init(void)  
{      
    CLK_DeInit();  
    CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);  
}  
  
/******************************************************************************/  
/* Function name:        GPIO_Init_my                                         */  
/* Descriptions:        IO初始化函数                                          */  
/* input parameters:    无                                                    */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
static void GPIO_Init_my(void)   
{  
    GPIO_Init(GPIOA,GPIO_Pin_2|GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Slow);    //悬空未用  
      
    GPIO_Init(GPIOB,POWER_BD,GPIO_Mode_Out_PP_Low_Slow);                 //默认断电  
    GPIO_Init(GPIOB,POWER_BT,GPIO_Mode_Out_PP_Low_Slow);                 //取消未用  
    GPIO_Init(GPIOB,MSEL,GPIO_Mode_Out_PP_Low_Slow);                     //取消未用,Wifi模式选择  
    GPIO_Init(GPIOB,NRESET,GPIO_Mode_Out_PP_Low_Slow);                   //取消未用,Wifi复位      
    GPIO_Init(GPIOB,BD_NRESET,GPIO_Mode_Out_PP_Low_Slow);                //北斗复位信号,默认复位状态  
    GPIO_Init(GPIOB,RESETB,GPIO_Mode_Out_PP_Low_Slow);                   //取消未用,蓝牙复位  
    GPIO_Init(GPIOB,SDA2|SCL2,GPIO_Mode_Out_OD_HiZ_Slow);                //电池电量用  
              
    GPIO_Init(GPIOC,SDA|SCL,GPIO_Mode_Out_OD_HiZ_Slow);                  //温度传感器  
    GPIO_Init(GPIOC,GPIO_Pin_2,GPIO_Mode_In_PU_No_IT);                   //串口接收  
    GPIO_Init(GPIOC,GPIO_Pin_3,GPIO_Mode_Out_PP_High_Slow);              //串口发送  
      
    GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);             //取消未用,Wifi供电  
}  
  
/******************************************************************************/  
/* Function name:        USART_Config                                         */  
/* Descriptions:        串口初始化函数                                        */  
/* input parameters:    无                                                    */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
static void USART_Config(void)  
{  
    CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE);      
      
    USART_DeInit();  
      
    USART_Init((uint32_t)9600, USART_WordLength_8D, USART_StopBits_1,  
                                            USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Rx | USART_Mode_Tx));  
                                             
    USART_Cmd(ENABLE);      
      
    USART_ITConfig(USART_IT_TXE,DISABLE);//关闭串口发送中断  
    USART_ITConfig(USART_IT_TC,DISABLE);//关闭串口发送完中断  
    USART_ITConfig(USART_IT_RXNE,ENABLE);//打开串口接收中断  
}  
  
/******************************************************************************/  
/* Function name:        UART1_SendByte                                       */  
/* Descriptions:        发送单字节                                            */  
/* input parameters:    data:待发送数据                                       */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
void USART_SendByte(uint8_t data)  
{  
    USART_SendData8((unsigned char)data);  
    /* Loop until the end of transmission */  
    while (USART_GetFlagStatus(USART_FLAG_TXE) == RESET);  
}  
  
/******************************************************************************/  
/* Function name:        UART1_SendString                                     */  
/* Descriptions:        发送字符串                                            */  
/* input parameters:    无                                                    */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
void USART_SendString(uint8_t* Data,uint16_t len)  
{  
  uint16_t i=0;  
  for(;i<len;i++)  
    USART_SendByte(Data);  
   
}  
/******************************************************************************/  
/* Function name:        Delay_ms                                             */  
/* Descriptions:        延时函数                                              */  
/* input parameters:    延时时间                                              */  
/* output parameters:   无                                                    */  
/* Returned value:      无                                                    */  
/******************************************************************************/  
void Delay_ms(uint32_t nCount)  
{  
    uint16_t i=0,j=0;;  
    for(i=0;i<nCount;i++){  
            for(j=0;j<1100;j++){  
                    ;  
            }  
    }  
}  
  
#ifdef  USE_FULL_ASSERT  
  
/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval : None
  */  
void assert_failed(uint8_t* file, uint32_t line)  
{  
    /* User can add his own implementation to report the file name and line number,
       ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */  
  
    /* Infinite loop */  
    while (1)  
    {  
    }  
}  
#endif  
   
/*********************************END OF FILE**********************************/  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

134

帖子

3

粉丝