/******************************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
关键字:STM8L101F3P6 查询发送 中断接收
引用地址:STM8L101F3P6查询发送中断接收
上一篇:NRF24L01无线通讯模块驱动
下一篇:dsPIC33F串口通讯中断接收发送数据UART
推荐阅读最新更新时间:2024-03-16 14:57
MSP430串口接收发送中断程序
MSP430串口接收发送中断程序F149 #include msp430x14x.h unsigned char RecBuf ; //接收数据缓存 unsigned char *SDat; //指向要发送的数据 unsigned char Rindex; //接收数据计数 unsigned char Tindex; //发送数据计数 unsigned char SendLen; //发送数据长度 void ConfigUart0() { P3SEL |= 0x30; // 选择
[单片机]
AVR USART接收中断程序
使用AVR的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示。 USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。 #include iom16v #define DISP_PORT PORTB #define DISP_DDR DDRB /* 程序功能:初始化UART为:8位,9.6K,接收中断 注意事项:基于7.3728M晶振 程序名称:UART初始化程序 */ void uart0_init (void) { UCSRB = 0x00; //disable while
[单片机]
stm32f103 keil5 HAL库 UART中断接收
1.根据选择的串口使能中断,由于需要,我将串口空闲(IDLE)中断时能,并使能串口接收中断 HAL_NVIC_EnableIRQ(USART3_IRQn);//使能USART3中断 HAL_NVIC_SetPriority(USART3_IRQn,3,3);//配置USART3的优先级 HAL_UART_Receive_IT(&huart3,correction_Table, datalength);//correction_Table是申请的数组首地址 __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE); //使能串口空闲(IDLE)中断 2.在中断函数中调用HAL_UART_IRQH
[单片机]
STM32串口中断的4种接收数据的实现方式
本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机。 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1- DR; USART1_SendByte(GetDa
[单片机]
用ST16C2552实现DSP高速串行通讯扩展
1 引言 随着大规模集成电路工艺技术的迅速发展,DSP已经越来越广泛地应用于工业场合。工业现场由于许多场合通讯双方相距较远,为了保证通讯成本和可靠性,必须采用串行方式进行通讯。目前TI公司DSP都只有一个UART口,比如TMS320LF2407,当同时需要与上位机和下面的被控对象进行通讯,或者同时连接几个上位机时,则需要对DSP进行串行通讯口扩展,而使用可编程的ST16C2552可以一次扩展两组相互独立的串口,满足各种条件下串行通讯的要求。 2 ST16C2552介绍 ST16C2552是Exar公司生产的通用异步通讯扩展器件,并与飞利浦公司的SC16C2552相兼容,可扩展2路独立的串行通讯,可编程设定通讯起始位、停止位和
[工业控制]
STM32F207运用串口空闲中断+DMA接收不定长数据
1.我们知道DMA可以自动的不在CPU干预下,自动把数据重外设存储到内存(我们这节讲的),内存到外设,内存到内存等。但是DMA接收的是指定长度的,在接收不定长数据的时候DMA就傻眼了。网上有许多方法讲解运用定时器超时检测来接收不定长数据,而我们现在要讲的是运用串口空闲中断+DMA的方式接收不定长数据。 2.我们调试用的是串口1、DMA_Channel_4。具体的配置见下面程序: DMA接收配置: void USART1_DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,
[单片机]
STM32串口中断接收一个完整的数据帧
代码运行条件: (1) 大端发送; (2) 上位机发送一帧数据的时间间隔不能大于主循环周期; (3)数据帧满足下面格式: 帧头部(Head) 类型(Type) 长度(Length) 值(Value) CRC校验 2字节 1字节 1字节 X字节 2字节 0xaa 0x55 X void USART6_Init (void) { GPIO_InitTypeDef GPIO_InitStructur
[单片机]
STM32(RFID)阶段一:添加串口USART2,修改中断接收协议
因学校比赛原因接触到RFID技术,并结合STM32单片机开发一卡通系统。由于需要和RFID读写器通信,以及上位机软件通信,所以添加USART2串口,并根据RFID数据包改写中断接收协议。资料支持:《不完全手册》《中文手册》端口通用与复用,APB1外设,串口寄存器,中断配置 阶段一:demo程序功能:通过串口USART2接收数据包,并把数据再发回去。RFID型号M3650A-HA 数据包第二个数据为数据包的长度,使用str接收长度,USART_RX_STA bit15置1 表示接收结束。 上代码 void uart_init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure
[单片机]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
- 有奖直播|TI DLP® 技术在AR HUD及车内显示应用的展望
- 抢先体验:TI MSPM0L1306 LaunchPad开发套件,赢三模无线键盘
- 学习Altera《SoC FPGA:体系结构重要吗?》文章,答题赢好礼!
- 有奖直播:英飞凌工业半导体在电机驱动行业中的应用 2020年4月21日 上午10:00-11:30 准时开启!
- 直播已结束|Molex 和 TTI 更小型、高速、可靠的连接器推动物联网应用的新发展
- 【MPS有奖评论】一起聊聊选型的那些过往
- #Micropython大作战#第一弹:动起来,大家一起来DIY
- 阅读Microchip多种连接接口SAM单片机精彩专题,参与活动赢好礼
- 4小时实战+剖析:TI工程师教你快速上手 各种无线产品开发 (限量$14售CC1352R1无线开发板,助你参与动手实验)
11月22日历史上的今天
厂商技术中心