177 lines
6.0 KiB
C
177 lines
6.0 KiB
C
|
#include "main.h"
|
|||
|
|
|||
|
uint8_t USART1_RX_BUF[USART1_REC_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART_REC_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
|
|||
|
uint32_t USART1_RX_STA = 0; // bit15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־,bit13~0<><30> <09><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>Ŀ
|
|||
|
uint8_t USART2_RX_BUF[USART2_REC_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART_REC_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
|
|||
|
uint32_t USART2_RX_STA = 0; // bit15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־,bit13~0<><30> <09><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>Ŀ
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ucos,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
#if SYSTEM_SUPPORT_UCOS
|
|||
|
#include "includes.h" //ucos ʹ<><CAB9>
|
|||
|
#endif
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD>,֧<><D6A7>printf<74><66><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫѡ<D2AA><D1A1>use MicroLIB
|
|||
|
#if 1
|
|||
|
#pragma import(__use_no_semihosting)
|
|||
|
//<2F><><EFBFBD><D7BC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>֧<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>
|
|||
|
struct __FILE
|
|||
|
{
|
|||
|
int handle;
|
|||
|
};
|
|||
|
|
|||
|
FILE __stdout;
|
|||
|
//<2F><><EFBFBD><EFBFBD>_sys_exit()<29>Ա<EFBFBD><D4B1><EFBFBD>ʹ<EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
void _sys_exit(int x)
|
|||
|
{
|
|||
|
x = x;
|
|||
|
}
|
|||
|
//<2F>ض<EFBFBD><D8B6><EFBFBD>fputc<74><63><EFBFBD><EFBFBD>
|
|||
|
int fputc(int ch, FILE *f)
|
|||
|
{
|
|||
|
USART2->DR = (u8)ch;
|
|||
|
while ((USART2->SR & 0X40) == 0)
|
|||
|
; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return ch;
|
|||
|
}
|
|||
|
#endif
|
|||
|
void USART1_SendData(uint8_t *s, uint16_t lenth)
|
|||
|
{
|
|||
|
for (uint32_t i = 0; i < lenth; i++)
|
|||
|
{
|
|||
|
UART_SendByte(USART1, (uint8_t)s[i]);
|
|||
|
}
|
|||
|
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
|
|||
|
}
|
|||
|
|
|||
|
void UART_SendByte( USART_TypeDef *USARTx, u8 SendData )
|
|||
|
{
|
|||
|
USART_SendData(USARTx, SendData);
|
|||
|
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ʼ<EFBFBD><CABC>IO <20><><EFBFBD><EFBFBD>1
|
|||
|
// bound:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void uart_init(u32 bound)
|
|||
|
{
|
|||
|
// GPIO<49>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
USART_InitTypeDef USART_InitStructure;
|
|||
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|||
|
|
|||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //ʹ<><CAB9>GPIOAʱ<41><CAB1>
|
|||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //ʹ<><CAB9>USART1ʱ<31><CAB1>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>Ӧ<EFBFBD><D3A6><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); // GPIOA9<41><39><EFBFBD><EFBFBD>ΪUSART1
|
|||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); // GPIOA10<31><30><EFBFBD><EFBFBD>ΪUSART1
|
|||
|
|
|||
|
// USART1<54>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; // GPIOA9<41><39>GPIOA10
|
|||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //<2F>ٶ<EFBFBD>50MHz
|
|||
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //<2F><><EFBFBD>츴<EFBFBD><ECB8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //<2F><><EFBFBD><EFBFBD>
|
|||
|
GPIO_Init(GPIOA, &GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PA9<41><39>PA10
|
|||
|
|
|||
|
// USART1 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_BaudRate = bound; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //<2F>ֳ<EFBFBD>Ϊ8λ<38><CEBB><EFBFBD>ݸ<EFBFBD>ʽ
|
|||
|
USART_InitStructure.USART_StopBits = USART_StopBits_1; //һ<><D2BB>ֹͣλ
|
|||
|
USART_InitStructure.USART_Parity = USART_Parity_No; //<2F><><EFBFBD><EFBFBD>żУ<C5BC><D0A3>λ
|
|||
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //<2F><>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //<2F>շ<EFBFBD>ģʽ
|
|||
|
USART_Init(USART1, &USART_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
|
|||
|
USART_Cmd(USART1, ENABLE); //ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>1
|
|||
|
|
|||
|
USART_ClearFlag(USART1, USART_FLAG_TC);
|
|||
|
|
|||
|
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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 = 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>
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ʼ<EFBFBD><CABC>IO <20><><EFBFBD><EFBFBD>2
|
|||
|
// bound:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void uart_init_2(u32 bound)
|
|||
|
{
|
|||
|
// GPIO<49>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
USART_InitTypeDef USART_InitStructure;
|
|||
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|||
|
|
|||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //ʹ<><CAB9>GPIOAʱ<41><CAB1>
|
|||
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //ʹ<><CAB9>USART2ʱ<32><CAB1>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>Ӧ<EFBFBD><D3A6><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); // GPIOA2<41><32><EFBFBD><EFBFBD>ΪUSART2
|
|||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); // GPIOA3<41><33><EFBFBD><EFBFBD>ΪUSART2
|
|||
|
|
|||
|
// USART1<54>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; // GPIOA9<41><39>GPIOA10
|
|||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //<2F>ٶ<EFBFBD>50MHz
|
|||
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //<2F><><EFBFBD>츴<EFBFBD><ECB8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //<2F><><EFBFBD><EFBFBD>
|
|||
|
GPIO_Init(GPIOA, &GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PA2<41><32>PA3
|
|||
|
|
|||
|
// USART1 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_BaudRate = bound; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //<2F>ֳ<EFBFBD>Ϊ8λ<38><CEBB><EFBFBD>ݸ<EFBFBD>ʽ
|
|||
|
USART_InitStructure.USART_StopBits = USART_StopBits_1; //һ<><D2BB>ֹͣλ
|
|||
|
USART_InitStructure.USART_Parity = USART_Parity_No; //<2F><><EFBFBD><EFBFBD>żУ<C5BC><D0A3>λ
|
|||
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //<2F><>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //<2F>շ<EFBFBD>ģʽ
|
|||
|
USART_Init(USART2, &USART_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
|
|||
|
USART_Cmd(USART2, ENABLE); //ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>2
|
|||
|
|
|||
|
USART_ClearFlag(USART2, USART_FLAG_TC);
|
|||
|
|
|||
|
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
|||
|
// Usart1 NVIC <20><><EFBFBD><EFBFBD>
|
|||
|
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //<2F><><EFBFBD><EFBFBD>1<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>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void USART2_IRQHandler(void) //<2F><><EFBFBD><EFBFBD>2<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
u8 data;
|
|||
|
#ifdef OS_TICKS_PER_SEC //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫʹ<D2AA><CAB9>ucosII<49><49>.
|
|||
|
OSIntEnter();
|
|||
|
#endif
|
|||
|
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>(<28><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>0x0d 0x0a<30><61>β)
|
|||
|
{
|
|||
|
data = USART_ReceiveData(USART2); //(USART1->DR); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ((USART2_RX_STA & 0x8000) == 0) //<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if ((data == 0x0A) || (data == 0x0D))
|
|||
|
{
|
|||
|
USART2_RX_STA |= 0x8000; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//sys_cmd_exe(); //ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
USART2_RX_BUF[USART1_RX_STA & 0x3FFF] = data;
|
|||
|
USART2_RX_STA++;
|
|||
|
if (USART2_RX_STA > (USART2_REC_LEN - 1))
|
|||
|
{
|
|||
|
USART2_RX_STA = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>,<2C><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|