20140624-STM8L101F3P6查询发送中断接收

/******************************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[i]=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();
}

/******************************************************************************/
/* 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[i]);
  
}
/******************************************************************************/
/* 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**********************************/

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sy_lixiang/article/details/34076317
个人分类: A02-STM8
上一篇20140624-STM8L101F3P6串口查询接收
下一篇20140626-STM8L101F3P6编程中关于assert_param()断言的小结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭