This commit is contained in:
2026-04-23 10:50:18 +08:00
commit a436fda935
844 changed files with 272643 additions and 0 deletions

View File

@ -0,0 +1,134 @@
#include "usart.h"
#include "pbdata.h"
char USART1_TX_BUF[USART1_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART2_MAX_SEND_LEN<45>ֽ<EFBFBD>
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)
{
USART_SendData(USARTx, Data);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET){}
}
void UART_PutStr (USART_TypeDef* USARTx, char *str)
{
while (0 != *str)
{
UART_PutChar(USARTx, *str);
str++;
}
}
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len)
{
uint16_t i;
for(i=0; i<Len; i++){
USART_SendData(USARTx, Data[i]);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
}
int fputc(int ch,FILE *f)
{
USART_ClearFlag(USART1,USART_FLAG_TC);
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>);
return ch;
}
void USART1_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //ʹ<><CAB9>USART1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //GPIOAʱ<41><CAB1>
USART_DeInit(USART1); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART1_TX PA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART1_RX PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART1<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
//ʹ<>ô<EFBFBD><C3B4>ڶ<EFBFBD>ȡSDI<44>ȸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>IO
void USART_RS232_DEinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_Cmd(USART1,DISABLE);
USART_DeInit(USART1);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //ʹ<><CAB9>PB<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //<2F><><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //<2F><><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_400KHz; //IO<49><4F><EFBFBD>ٶ<EFBFBD>Ϊ400KHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_9);
GPIO_SetBits(GPIOA,GPIO_Pin_10);
}
//ʹ<>ô<EFBFBD><C3B4>ڶ<EFBFBD>ȡSDI<44>ȸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>IO
void USART_SDI_DEinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_Cmd(USART1,DISABLE);
USART_DeInit(USART1);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //ʹ<><CAB9>PB<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //<2F><><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //<2F><><EFBFBD><EFBFBD>
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_400KHz; //IO<49><4F><EFBFBD>ٶ<EFBFBD>Ϊ400KHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
}
void USART1_IRQHandler(void)
{
u8 ucCh;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
{
ucCh =USART_ReceiveData(USART1);
USART_SendData(USART1, ucCh);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
}

View File

@ -0,0 +1,18 @@
#ifndef _usart_H
#define _usart_H
#include "general_type.h"
#include "stm32l1xx_usart.h"
#define USART1_MAX_SEND_LEN 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
void USART1_Configuration(u32 baund);
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len);
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data) ;
void UART_PutStr (USART_TypeDef* USARTx, char *str) ;
//void TIM3_Set(unsigned char sta);
void Usart1_ReceiveBuff_Clear(void);
//void timer3_init(void);
void USART_RS232_DEinit(void);
void USART_SDI_DEinit(void);
#endif

View File

@ -0,0 +1,147 @@
#include "usart1_sdi.h"
#include "bsp.h"
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ע<><D7A2>,<2C><>ȡUSARTx->SR<53>ܱ<EFBFBD><DCB1><EFBFBD>Ī<EFBFBD><C4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
char USART1_SDI_RX_BUF[USART1_SDI_REC_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART_REC_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
char USART1_SDI_TX_BUF[100];
//<2F><><EFBFBD><EFBFBD>״̬
//bit15<31><35> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
//bit14<31><34> <09><><EFBFBD>յ<EFBFBD>0x0d
//bit13~0<><30> <09><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>Ŀ
u16 USART_SDI_RX_STA=0; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void USART1_SDI_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
Enable_SDI_RS232=0;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //ʹ<><CAB9>USART1_SDI_SDI
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOAʱ<41><CAB1>
//NVIC_Configuration();
USART_DeInit(USART1); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART1_SDI_SDI_TX PB.6 PB.7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_Even; //<2F><>У<EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ7λ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART1_SDI_SDI<44>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//USART1_SDI_SDI NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//<2F><><EFBFBD><EFBFBD>3<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ClearFlag(USART1,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
void USART1_SDI_CLR_RXBuf(void)
{
memset(USART1_SDI_RX_BUF, 0, USART1_SDI_REC_LEN);
USART_SDI_RX_STA=0;
}
void USART1_SDI_SDI_CLR_TXBuf(void)
{
memset(USART1_SDI_TX_BUF, 0, 100);
}
void u1_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART1_SDI_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART1_SDI_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(USART1,USART1_SDI_TX_BUF[j]);
}
}
//void timer4_init(void)
//{
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
// TIM_TimeBaseStructure.TIM_Period = 99;
// TIM_TimeBaseStructure.TIM_Prescaler = 3199;//<2F>ж<EFBFBD>ʱ<EFBFBD><CAB1>10ms
// TIM_TimeBaseStructure.TIM_ClockDivision = 1;
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
// TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
//
// /* TIM IT enable */
// TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
// TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
// /* TIM4 enable counter */
// TIM_Cmd(TIM4, DISABLE);
// /* Enable the TIM4 Interrupt */
//
// NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure);
//}
////<2F><><EFBFBD><EFBFBD>TIM4<4D>Ŀ<EFBFBD><C4BF><EFBFBD>
////sta:0<><30><EFBFBD>ر<EFBFBD>;1,<2C><><EFBFBD><EFBFBD>;
//void TIM4_Set(unsigned char sta)
//{
// if(sta)
// {
//
// TIM_SetCounter(TIM4,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TIM_Cmd(TIM4, ENABLE); //ʹ<><CAB9>TIMx
// }else TIM_Cmd(TIM4, DISABLE);//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>2
//}
///**
// * @brief This function handles TIM4 global interrupt request.
// * @param None
// * @retval None
// */
//void TIM4_IRQHandler(void)
//{
// if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
// {
// USART_SDI_RX_STA|=1<<15; //<2F><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
// TIM4_Set(0); //<2F>ر<EFBFBD>TIM4
//
// }
//}
//<2F><><EFBFBD><EFBFBD>3,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>USART1_MAX_SEND_LEN<45>ֽ<EFBFBD>

View File

@ -0,0 +1,22 @@
#ifndef _usart1_sdi_H
#define _usart1_sdi_H
#include "bsp.h"
#include "stm32l1xx_usart.h"
#define USART1_SDI_REC_LEN 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> 100
extern char USART1_SDI_RX_BUF[USART1_SDI_REC_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART_REC_LEN<45><4E><EFBFBD>ֽ<EFBFBD><>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>з<EFBFBD>
extern u16 USART_SDI_RX_STA; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void USART1_SDI_Configuration(u32 baund);
void USART1_SDI_CLR_RXBuf(void);
void u1_printf(char* fmt,...) ;
#endif

View File

@ -0,0 +1,166 @@
#include "usart2.h"
#include "stdio.h"
#include "string.h"
#include "pbdata.h"
#include "stdarg.h"
//<2F><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART2_MAX_RECV_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART2_MAX_SEND_LEN<45>ֽ<EFBFBD>
vu16 USART2_RX_STA=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void USART2_ReceiveBuff_Clear(void)
{
USART2_RX_STA=0;
memset(USART2_RX_BUF,0,USART2_MAX_RECV_LEN);
}
//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
void USART2_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //ʹ<><CAB9>USART2
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //GPIOBʱ<42><CAB1>
//NVIC_Configuration();
USART_DeInit(USART2); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART2_TX PB.10 PB.11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2,&USART_InitStructure);
USART_Cmd(USART2,ENABLE);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART2<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//<2F><><EFBFBD><EFBFBD>3<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ClearFlag(USART2,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
//<2F><><EFBFBD><EFBFBD>2,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>USART2_MAX_SEND_LEN<45>ֽ<EFBFBD>
void u2_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
USART2_ReceiveBuff_Clear();
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART2_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(USART2,USART2_TX_BUF[j]);
}
}
void timer2_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 3199;
TIM_TimeBaseStructure.TIM_ClockDivision = 1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* TIM IT enable */
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
/* TIM2 enable counter */
TIM_Cmd(TIM2, DISABLE);
/* Enable the TIM2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE); //ʹ<><CAB9>TIMx
}
//<2F><><EFBFBD><EFBFBD>TIM2<4D>Ŀ<EFBFBD><C4BF><EFBFBD>
//sta:0<><30><EFBFBD>ر<EFBFBD>;1,<2C><><EFBFBD><EFBFBD>;
void TIM2_Set(unsigned char sta)
{
if(sta)
{
TIM_SetCounter(TIM2,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TIM_Cmd(TIM2, ENABLE); //ʹ<><CAB9>TIMx
}else TIM_Cmd(TIM2, DISABLE);//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>2
}
/**
* @brief This function handles TIM2 global interrupt request.
* @param None
* @retval None
*/
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
WKUP_PIN_Status=Key_Scan();
}
}
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
{
res =USART_ReceiveData(USART2);
if((USART2_RX_STA&(1<<15))==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(USART2_RX_STA<(USART2_MAX_RECV_LEN-1)) //<2F><><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// TIM_SetCounter(TIM2,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(USART2_RX_STA==0) //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>7<EFBFBD><37><EFBFBD>ж<EFBFBD>
// {
// TIM_Cmd(TIM2,ENABLE);//ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>7
// }
USART2_RX_BUF[USART2_RX_STA++]=res; //<2F><>¼<EFBFBD><C2BC><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ֵ
}else
{
USART2_RX_STA|=1<<15; //ǿ<>Ʊ<EFBFBD><C6B1>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
}

View File

@ -0,0 +1,23 @@
#ifndef _usart2_H
#define _usart2_H
#include "general_type.h"
#include "stm32l1xx_usart.h"
#define USART2_MAX_RECV_LEN 300 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#define USART2_MAX_SEND_LEN 300 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#define USART2_RX_EN 1 //0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD>.
extern u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART2_MAX_RECV_LEN<45>ֽ<EFBFBD>
extern u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART2_MAX_SEND_LEN<45>ֽ<EFBFBD>
extern vu16 USART2_RX_STA; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void USART2_Configuration(u32 baund);
void u2_printf(char* fmt,...);
void TIM2_Set(unsigned char sta);
void timer2_init(void);
void USART2_ReceiveBuff_Clear(void);
#endif

View File

@ -0,0 +1,120 @@
#include "usart3.h"
//<2F><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_RECV_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_SEND_LEN<45>ֽ<EFBFBD>
vu16 point1 = 0;
void USART3_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //ʹ<><CAB9>USART3
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOBʱ<42><CAB1>
//NVIC_Configuration();
USART_DeInit(USART3); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART3_TX PB.10 PB.11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
USART_Cmd(USART3,ENABLE);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART3<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//<2F><><EFBFBD><EFBFBD>3<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ClearFlag(USART3,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
void USART3_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART3);//(USART1->DR); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Res == 0x24)
{
point1 = 0;
}
USART3_RX_BUF[point1++] = Res;
if(USART3_RX_BUF[0] == '$' && USART3_RX_BUF[4] == 'M' && USART3_RX_BUF[5] == 'C') //ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD>"GPRMC/GNRMC"<22><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
{
if(Res == '\n')
{
memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length); //<2F><><EFBFBD><EFBFBD>
memcpy(Save_Data.GPS_Buffer, USART3_RX_BUF, point1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Save_Data.isGetData = 1;
point1 = 0;
memset(USART3_RX_BUF, 0, USART3_MAX_RECV_LEN); //<2F><><EFBFBD><EFBFBD>
}
}
// if(USART3_RX_BUF[0] == '$' && USART3_RX_BUF[3] == 'G'&& USART3_RX_BUF[4] == 'G' && USART3_RX_BUF[5] == 'A') //ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD>"GPRMC/GNRMC"<22><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
// {
// if(Res == '\n')
// {
// memset(Save_Data.GGA_Buffer, 0, GPS_Buffer_Length); //<2F><><EFBFBD><EFBFBD>
// memcpy(Save_Data.GGA_Buffer, USART3_RX_BUF, point1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Save_Data.isGetData = true;
// point1 = 0;
// memset(USART3_RX_BUF, 0, USART3_MAX_RECV_LEN); //<2F><><EFBFBD><EFBFBD>
// }
//
// }
if(point1 >= (USART3_MAX_RECV_LEN-1))
{
point1 = 0;
}
}
}
//<2F><><EFBFBD><EFBFBD>3,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>USART3_MAX_SEND_LEN<45>ֽ<EFBFBD>
void u3_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART3_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(USART3,USART3_TX_BUF[j]);
}
}

View File

@ -0,0 +1,22 @@
#ifndef _usart3_H
#define _usart3_H
#include "bsp.h"
#include "general_type.h"
#include "stm32l1xx_usart.h"
#define USART3_MAX_RECV_LEN 256 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#define USART3_MAX_SEND_LEN 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
extern unsigned char USART3_RX_BUF[USART3_MAX_RECV_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_RECV_LEN<45>ֽ<EFBFBD>
extern unsigned char USART3_TX_BUF[USART3_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_SEND_LEN<45>ֽ<EFBFBD>
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len);
void USART3_Configuration(u32 baund);
void u3_printf(char* fmt,...);
void Usart3_ReceiveBuff_Clear(void);
#endif

View File

@ -0,0 +1,439 @@
#include "usart4.h"
char temp_data[100];
//<2F><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
//Usart4_Fram_Record_Struct Usart4_Fram_Record_Structs;
u8 USART4_TX_BUF[USART4_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
void USART4_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); //ʹ<><CAB9>USART4
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); //GPIOcʱ<63><CAB1>
//NVIC_Configuration();
USART_DeInit(UART4); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART1_TX PA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//USART1_RX PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_UART4);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_UART4);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(UART4,&USART_InitStructure);
USART_Cmd(UART4,ENABLE);
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=5;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART1<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>жϺͿ<CFBA><CDBF><EFBFBD><EFBFBD>ж<EFBFBD>
USART_ClearFlag(UART4,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
USART_ITConfig(UART4,USART_IT_IDLE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART1<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>жϺͿ<CFBA><CDBF><EFBFBD><EFBFBD>ж<EFBFBD>
}
void timer4_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 3199;//<2F>ж<EFBFBD>ʱ<EFBFBD><CAB1>10ms
TIM_TimeBaseStructure.TIM_ClockDivision = 1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
/* TIM IT enable */
TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
/* TIM4 enable counter */
TIM_Cmd(TIM4, DISABLE);
/* Enable the TIM4 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//<2F><><EFBFBD><EFBFBD>TIM4<4D>Ŀ<EFBFBD><C4BF><EFBFBD>
//sta:0<><30><EFBFBD>ر<EFBFBD>;1,<2C><><EFBFBD><EFBFBD>;
void TIM4_Set(unsigned char sta)
{
if(sta)
{
TIM_SetCounter(TIM4,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TIM_Cmd(TIM4, ENABLE); //ʹ<><CAB9>TIMx
}else TIM_Cmd(TIM4, DISABLE);//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>2
}
/**
* @brief This function handles TIM4 global interrupt request.
* @param None
* @retval None
*/
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 1;
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM4_Set(0); //<2F>ر<EFBFBD>TIM4
}
}
void Usart4_ReceiveBuff_Clear(void)
{
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag=0;
ESP8266_Fram_Record_Struct .InfBit .FramLength=0;
memset(ESP8266_Fram_Record_Struct.Data_RX_BUF,0,RX_BUF_MAX_LEN);
//memset(USART4_TX_BUF,0,USART4_MAX_SEND_LEN);
}
void UART4_IRQHandler(void)
{
u8 ucCh;
if(USART_GetITStatus( UART4, USART_IT_RXNE ) != RESET )
{
ucCh = USART_ReceiveData( UART4 );
if(ESP8266_Fram_Record_Struct .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
ESP8266_Fram_Record_Struct .Data_RX_BUF[ ESP8266_Fram_Record_Struct .InfBit .FramLength ++ ] = ucCh;
// TIM_SetCounter(TIM4,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TIM4_Set(1); //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>2<EFBFBD><32><EFBFBD>ж<EFBFBD>
}
else
{
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 1;
}
}
if(USART_GetITStatus( UART4, USART_FLAG_ORE ) != RESET )
{
USART_ReceiveData(UART4);
USART_ClearFlag(UART4, USART_FLAG_ORE);
}
// if(USART_GetITStatus( UART4, USART_FLAG_FE ) != RESET )
// {
// USART_ReceiveData(UART4);
// USART_ClearFlag(UART4, USART_FLAG_FE);
// }
//
// if(USART_GetITStatus( UART4, USART_FLAG_PE ) != RESET )
// {
// USART_ReceiveData(UART4);
// USART_ClearFlag(UART4, USART_FLAG_PE);
// }
if( USART_GetITStatus( UART4, USART_IT_IDLE ) != RESET ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>
{
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 1;
ucCh = USART_ReceiveData( UART4 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD>ȶ<EFBFBD>USART_SR,Ȼ<><C8BB><EFBFBD><EFBFBD>USART_DR<44><52>
}
}
//<2F><><EFBFBD><EFBFBD>4,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>USART4_MAX_SEND_LEN<45>ֽ<EFBFBD>
void u4_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART4_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART4_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(UART4,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(UART4,USART4_TX_BUF[j]);
}
}
u8 USART4_Recieve_Ide(void)
{
u8 i = 0;
u32 RTC_T1,Alarm_T2;//Uptime_T3;
RTC_AlarmTypeDef RTC_AlarmStructs;
RTC_DateTypeDef nowdatas;
char *recString;
char *recStringNext;
char adda;
char hhmmss[7]={'\0'},yymmdd[10]={'\0'};
if( ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag==1)
{
/************<2A>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>***********/
if((strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-rst")!=NULL))//<2F><><EFBFBD>ջָ<D5BB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Write_Factory_Par();
EEPROM_ReadBytes(140,&Par_store_flag,1);
if(Par_store_flag)ESP8266_SendString(DISABLE,"parw-rst,OK\r\n",13,0);
else ESP8266_SendString(DISABLE,"parw-rst,fail\r\n",15,0);
}
/*д<><D0B4>******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԤԼʱ<D4BC><EFBFBD><E4A1A2><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>Զ<EFBFBD><D4B6>ʱ<EFBFBD><CAB1>*********/
if((strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-1")!=NULL))//<2F>жϽ<D0B6><CFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memset(temp_data,0,100);
for (i = 0 ; i < 5 ; i++)
{
if (i == 0)
{
if ((recString = strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-1")) == NULL)
;
recString+=6;
}
else
{
recString++;
if((recStringNext = strstr(recString, ",")) != NULL)
{
switch(i)
{
case 1: memset(Init_Data_Equipment.Measure_Interval,0,5);
memcpy(Init_Data_Equipment.Measure_Interval, recString, recStringNext - recString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 2: memset(Init_Data_Equipment.appointment_time,0,8);
memcpy(Init_Data_Equipment.appointment_time, recString, recStringNext - recString);break; //ԤԼʱ<D4BC><CAB1>
case 3: memset(Init_Data_Equipment.measure_mode,0,1);
memcpy(Init_Data_Equipment.measure_mode, recString, recStringNext - recString);break; //<2F><><EFBFBD><EFBFBD>ģʽ
case 4: memset(Init_Data_Equipment.Pub_Time,0,6);
memcpy(Init_Data_Equipment.Pub_Time, recString, recStringNext - recString);break; //IOT<4F><54><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//case 5:memcpy(temp_data, recString, 12);break; //<2F><>ȡϵͳʱ<CDB3><CAB1>
default:break;
}
}
recString=recStringNext;
if(i==3)
{
recStringNext=strstr(recString,"\r\n");
recString++;
memset(Init_Data_Equipment.Pub_Time,0,6);
memcpy(Init_Data_Equipment.Pub_Time, recString, 6);
}
}
}
RTC_T1=(Init_Data_Equipment.Measure_Interval[0]*10000+
Init_Data_Equipment.Measure_Interval[1]*1000+
Init_Data_Equipment.Measure_Interval[2]*100+
Init_Data_Equipment.Measure_Interval[3]*10+
Init_Data_Equipment.Measure_Interval[4]*1);
if(RTC_T1<60)//RTC_T1<54><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>S
sprintf(Init_Data_Equipment.Measure_Interval,"%s","00060");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С60S
Write_Equipment_Par(Init_Data_Equipment);
ESP8266_SendString(DISABLE,"parw-1,OK\r\n",11,0);
}
/*д<><D0B4>******Զ<><D4B6>IP<49><50>Զ<EFBFBD><D4B6><EFBFBD>˿ڡ<CBBF>wifi<66><69><EFBFBD>ơ<EFBFBD>wifi<66><69><EFBFBD>롢wifi<66>˿<EFBFBD>*********/
if((strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-2")!=NULL)&(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "\"")!=NULL))
{
for (i = 0 ; i < 5 ; i++)
{
if (i == 0)
{
if ((recString = strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-2")) != NULL)
;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
recString+=6;
}
else
{
recString++;
if((recStringNext = strstr(recString, ",")) != NULL)
{
switch(i)
{
case 1: memset(Init_Data_Equipment.Bc25_Ip,0,20);
memcpy(Init_Data_Equipment.Bc25_Ip, recString, recStringNext - recString);break; //iot ip
case 2: memset(Init_Data_Equipment.Bc25_Port,0,10);
memcpy(Init_Data_Equipment.Bc25_Port, recString, recStringNext - recString);break; //iot port
case 3: memset(Init_Data_Equipment.ESP8266_AP_SSIDs,0,20);
memcpy(Init_Data_Equipment.ESP8266_AP_SSIDs, recString, recStringNext - recString);break; //wifi <20><><EFBFBD><EFBFBD>
case 4: memset(Init_Data_Equipment.ESP8266_AP_PWDs,0,10);
memcpy(Init_Data_Equipment.ESP8266_AP_PWDs, recString, recStringNext - recString);break; //wifi <20><><EFBFBD><EFBFBD>
//case 5:memcpy(temp_data, recString, 12);break; //<2F><>ȡϵͳʱ<CDB3><CAB1>
default:break;
}
}
recString=recStringNext;
}
}
memcpy(Init_Data_Equipment.ESP8266_AP_Ports, recString+1, 4); //<2F><>ȡwifi port
Write_Equipment_Par(Init_Data_Equipment);
ESP8266_SendString(DISABLE,"parw-2,OK\r\n",11,0);
}
/*д<><D0B4>******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*********/
if((strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-3")!=NULL))
{
if ((recString = strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-3,1")) != NULL)
{
if(TASKRUNSS.APPO_RUN|TASKRUNSS.PROS1_RUN)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ռ<EFBFBD><D5BC>
{
ESP8266_SendString(DISABLE,"parw-3,busy\r\n",13,0);
}else
{
MYITStatus1.WKUP_MEA_WIFI=1;
osThreadResume(ThreadIdProcsee1);//<2F><><EFBFBD><EFBFBD>0<EFBFBD>ָ<EFBFBD>
ESP8266_SendString(DISABLE,"parw-3,OK\r\n",11,0);
}
}
if ((recString = strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-3,0")) != NULL)
{
// osThreadSuspend(ThreadIdProcsee0);//<2F><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
// RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
// ESP8266_SendString(DISABLE,"OK\r\n",4,0);
}
}
/*<2A><><EFBFBD><EFBFBD>******ϵͳʱ<CDB3><CAB1>*********/
if((recString=strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-4")) !=NULL)
{
memset(temp_data,0,200);
recString+=7;
memcpy(temp_data, recString, 13); //<2F><>ȡϵͳʱ<CDB3><CAB1>
if(((temp_data[2]-'0')*10+(temp_data[3]-'0')*1)>12|
((temp_data[4]-'0')*10+(temp_data[5]-'0')*1)>31|
((temp_data[7]-'0')*10+(temp_data[8]-'0')*1)>23|
((temp_data[9]-'0')*10+(temp_data[10]-'0')*1)>59|
((temp_data[11]-'0')*10+(temp_data[12]-'0')*1)>59)
{
ESP8266_SendString(DISABLE,"parw-4,fail\r\n",13,0);
}else
{
RTC_T1=RTC_GetSeconds();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ǰRTC-time-S
RTC_GetDate(RTC_Format_BIN,&nowdatas);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
SetRTC(((temp_data[0]-'0')*10+(temp_data[1]-'0')*1),
((temp_data[2]-'0')*10+(temp_data[3]-'0')*1),
((temp_data[4]-'0')*10+(temp_data[5]-'0')*1),
((temp_data[7]-'0')*10+(temp_data[8]-'0')*1),
((temp_data[9]-'0')*10+(temp_data[10]-'0')*1),
((temp_data[11]-'0')*10+(temp_data[12]-'0')*1));
if((RTC->CR)&0x100)//<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
RTC_GetAlarm(RTC_Format_BIN,RTC_Alarm_A,&RTC_AlarmStructs);
Alarm_T2=RTC_AlarmStructs.RTC_AlarmDateWeekDay*86400+
RTC_AlarmStructs.RTC_AlarmTime.RTC_Hours*3600+
RTC_AlarmStructs.RTC_AlarmTime.RTC_Minutes*60+
RTC_AlarmStructs.RTC_AlarmTime.RTC_Seconds*1;//<2F><>ȡALARMA<4D><41>ֵ
RTC_AlarmAConfig(Alarm_T2-RTC_T1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
}
if((RTC->CR)&0x200)//<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(wut_rtc_s>RTC_T1)RTC_T1+=86400;
RtcWakeUpConfig(RTC_T1-wut_rtc_s);
}
ESP8266_SendString(DISABLE,"parw-4,OK\r\n",11,0);
}
}
/*д<><D0B4>******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>޸<EFBFBD>*********/
if((recString=strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parw-5")) !=NULL) //parw-aAb,0A1
{
recString=strstr(recString, ",");
recString++;
recStringNext=recString+2;
Sdi_chanegadd(recString[0],recStringNext[0]);
adda=Sdi_Readone(recStringNext[0]);
if(adda==0)
{
ESP8266_SendString(DISABLE,"parw-5,OK\r\n",11,0);
//<2F><>ֵ<EFBFBD><D6B5>ͬ
}else
ESP8266_SendString(DISABLE,"parw-5,fail\r\n",13,0);
}
/*<2A><>ȡ******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԤԼʱ<D4BC><EFBFBD><E4A1A2><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>Զ<EFBFBD><D4B6>ʱ<EFBFBD><CAB1>*********/
if((recString=strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parr-1")) !=NULL)
{
//&&(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "\r\n"))!=NULL)
memset(temp_data,0,200);
Init_Data_Equipment=Read_Equipment_Par();
sprintf(temp_data,"parr-1,%s,%s,%s,%s\r\n",
Init_Data_Equipment.Measure_Interval,
Init_Data_Equipment.appointment_time,
Init_Data_Equipment.measure_mode,
Init_Data_Equipment.Pub_Time
);
ESP8266_SendString(DISABLE,temp_data,strlen(temp_data),0);
}
/*<2A><>ȡ******Զ<><D4B6>IP<49><50>Զ<EFBFBD><D4B6><EFBFBD>˿ڡ<CBBF>wifi<66><69><EFBFBD>ơ<EFBFBD>wifi<66><69><EFBFBD>롢wifi<66>˿<EFBFBD>*********/
if(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parr-2"))
{
memset(temp_data,0,200);
GetRTC(hhmmss,yymmdd);
sprintf(temp_data,"%s,%s,%s,%s,%s,%s\r\n",
"parr-2",
Init_Data_Equipment.Bc25_Ip,
Init_Data_Equipment.Bc25_Port,
Init_Data_Equipment.ESP8266_AP_SSIDs,
Init_Data_Equipment.ESP8266_AP_PWDs,
Init_Data_Equipment.ESP8266_AP_Ports
);
ESP8266_SendString(DISABLE,temp_data,strlen(temp_data),0);
}
/*<2A><>ȡ******ϵͳʱ<CDB3><CAB1> <20><><EFBFBD><EFBFBD>*********/
if(strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parr-4"))
{
memset(temp_data,0,200);
GetRTC(hhmmss,yymmdd);
sprintf(temp_data,"%s,%s,%s\r\n","parr-4",yymmdd,hhmmss);
ESP8266_SendString(DISABLE,temp_data,strlen(temp_data),0);
}
/*<2A><>ȡ******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ѯ*********/
if((recString=strstr(ESP8266_Fram_Record_Struct.Data_RX_BUF, "parr-s?")) !=NULL)
{
memset(temp_data,0,200);
adda=Sdi_readaddress();
if(adda!=0x7f)
{
sprintf(temp_data,"Address:%c\r\n",adda);
ESP8266_SendString(DISABLE,temp_data,strlen(temp_data),0);
}
else
ESP8266_SendString(DISABLE,"Address,fail\r\n",14,0);
}
Usart4_ReceiveBuff_Clear();
}
return 0;
}

View File

@ -0,0 +1,40 @@
#ifndef _usart4_H
#define _usart4_H
#include "bsp.h"
#include "general_type.h"
#include "stm32l1xx_usart.h"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#if defined ( __CC_ARM )
#pragma anon_unions
#endif
#define USART4_MAX_RECV_LEN 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#define USART4_MAX_SEND_LEN 512 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
void USART4_Configuration(u32 baund);
void Usart4_ReceiveBuff_Clear(void);
void u4_printf(char* fmt,...);
u8 USART4_Recieve_Ide(void);
void timer4_init(void);
void TIM4_Set(unsigned char sta);
typedef struct STRUCT_USART4_Fram //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><E1B9B9>
{
char Usart4_RX_BUF[USART4_MAX_RECV_LEN];
union
{
__IO u16 InfAll;
struct
{
__IO u16 FramLength :15; // 14:0
__IO u16 FramFinishFlag :1; // 15
}InfBit;
};
}Usart4_Fram_Record_Struct;
//extern Usart4_Fram_Record_Struct Usart4_Fram_Record_Structs;
#endif

View File

@ -0,0 +1,107 @@
#include "bsp.h"
//<2F><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
Usart5_Fram_Record_Struct Usart5_Fram_Record_Structs;
u8 Usart5_TX_BUF[520]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
void Usart5_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); //ʹ<><CAB9>Usart5
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOD, ENABLE); //GPIOcʱ<63><CAB1>
//NVIC_Configuration();
USART_DeInit(UART5); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART1_TX PC12
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//USART1_RX PD2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(UART5,&USART_InitStructure);
USART_Cmd(UART5,ENABLE);
USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART1<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ClearFlag(UART5,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
void Usart5_ReceiveBuff_Clear(void)
{
Usart5_Fram_Record_Structs.InfBit.FramLength=0;
Usart5_Fram_Record_Structs.InfBit.FramFinishFlag=0;
memset(Usart5_Fram_Record_Structs.Usart5_RX_BUF,0,Usart5_MAX_RECV_LEN);
memset(Usart5_TX_BUF,0,200);
}
void UART5_IRQHandler(void)
{
u8 ucCh;
if(USART_GetITStatus( UART5, USART_IT_RXNE ) != RESET )
{
ucCh = USART_ReceiveData( UART5 );
if(Usart5_Fram_Record_Structs .InfBit .FramLength < ( Usart5_MAX_RECV_LEN - 1 ) )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
Usart5_Fram_Record_Structs .Usart5_RX_BUF[ Usart5_Fram_Record_Structs .InfBit .FramLength ++ ] = ucCh;
}
}
if( USART_GetITStatus( UART5, USART_IT_IDLE ) == SET ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>
{
Usart5_Fram_Record_Structs .InfBit .FramFinishFlag = 1;
ucCh = USART_ReceiveData( UART5 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD>ȶ<EFBFBD>USART_SR,Ȼ<><C8BB><EFBFBD><EFBFBD>USART_DR<44><52>
}
}
//<2F><><EFBFBD><EFBFBD>5,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>Usart5_MAX_SEND_LEN<45>ֽ<EFBFBD>
void u5_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)Usart5_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)Usart5_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(UART5,Usart5_TX_BUF[j]);
}
}

View File

@ -0,0 +1,37 @@
#ifndef _usart5_H
#define _usart5_H
#include "bsp.h"
#include "general_type.h"
#include "stm32l1xx_usart.h"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#if defined ( __CC_ARM )
#pragma anon_unions
#endif
#define Usart5_MAX_RECV_LEN 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
void Usart5_Configuration(u32 baund);
void Usart5_ReceiveBuff_Clear(void);
void u5_printf(char* fmt,...);
typedef struct STRUCT_Usart5_Fram //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><E1B9B9>
{
char Usart5_RX_BUF[Usart5_MAX_RECV_LEN];
union
{
__IO u16 InfAll;
struct
{
__IO u16 FramLength :15; // 14:0
__IO u16 FramFinishFlag :1; // 15
}InfBit;
};
}Usart5_Fram_Record_Struct;
extern Usart5_Fram_Record_Struct Usart5_Fram_Record_Structs;
#endif