/******************************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**********************************/
20140624-STM8L101F3P6查询发送中断接收
最新推荐文章于 2020-01-26 17:27:00 发布