20140624-STM8L101F3P6查询发送中断接收

原创 2014年06月24日 10:09:07
/******************************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**********************************/

版权声明:本文为博主原创文章,未经博主允许不得转载。

STM8S和STM8L调试串口中断的注意点

STM8L串口中断注意点 在调试PM2.5传感器GP2Y1051的时候,发现在仿真的时候开始能够进行数据的接受,但是如果暂停之后就不能接受数据,其实只是接收了一次完整的数据。 解...

STM8S类型单片机UART一直进入接收中断问题解决方案

问题描述: 在一个项目中,下位机使用的是STM8S003F3为主芯片。在使用RS485进行与上位机通信时,会一直进入接收中断,根本未接收到上位机的正确数据。 解决过程: 一开始以为是485芯片R...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

20131007-STM8L101F3P6关于硬件IIC写时序和勘误部分的翻译

写时序 -----------------------------------------------------------------------------------------------...

20140624-STM8L101F3P6串口查询发送

先说几句,一直都没有对STM8的串口应用进行总结,最近小结一下

161213 笔记---STM8单片机的中断控制(ITC)

内部中断:一般是由硬件错误或者运算过程中出错引起的,一般是不可避免的; 外部中断:是处理器的外设发出的中断请求,如定时器中断,UART接收中断,外部中断一般都可以通过中断控制器进行屏蔽;1.ITC功...

STM8L 在USART中使用DMA来发送与接收数据

STM8L 在USART中使用DMA来发送与接收数据,在这中间该如何配置及使用DMA

20140627-STM8L101F3P6关于毫秒级延时函数不同写法的波形

总结一下STM8L101F3P6工作在16MHz下,利用死循环、中断等不同写法的微秒级延时函数精度的情况。 一、死循环空指令的写法,延时函数程序如下:...

20130822-STM8L101F3P6的PD0使用异常,尚未解决~!

问题描述: 在STM8L101F3P6的PD0这个口,初始化函数中设置为推挽输出高电平: GPIO_Init(GPIOD,POWER_UP,GPIO_Mode_Out_PP_High_Fast);  ...

20140627-STM8L101F3P6关于微秒级延时函数不同写法的波形

1.STM8L101F3P6工作在16MHz下,延时函数程序如下: /****************************************************************...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:20140624-STM8L101F3P6查询发送中断接收
举报原因:
原因补充:

(最多只允许输入30个字)