新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2017-9-14
- 在线时间
- 5 小时
|
1金钱
#include <includes.h>
/* ----------------- APPLICATION GLOBALS ------------------ */
static OS_TCB AppTaskStartTCB;
static CPU_STK AppTaskStartStk[APP_TASK_START_STK_SIZE];
static void AppTaskStart (void *p_arg);
static void AppTaskCreate (void);
static void AppObjCreate (void);
//================================================================================================
OS_TCB RS232_command_StartTCB;
CPU_STK RS232_command_Task_Stk[APP_TASK_START_STK_SIZE];
OS_SEM Uart_1_Char_Semp;
OS_MUTEX Uart_1_Mutex;
OS_SEM Uart_2_Char_Semp;
OS_MUTEX Uart_2_Mutex;
/*
*********************************************************************************************************
* main()
*********************************************************************************************************
*/
int main(void)
{
OS_ERR err;
BSP_IntDisAll(); /* Disable all interrupts. */
CPU_Init(); /* Initialize uC/CPU services. */
Frist_On_Machine();
OSInit(&err); /* Init OS. */
OSTaskCreate((OS_TCB *)&AppTaskStartTCB, /* Create the start task */
(CPU_CHAR *)"App Task Start",
(OS_TASK_PTR ) AppTaskStart,
(void *) 0,
(OS_PRIO ) APP_TASK_START_PRIO,
(CPU_STK *)&AppTaskStartStk[0],
(CPU_STK )(APP_TASK_START_STK_SIZE / 10u),
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE,
(OS_MSG_QTY ) 0,
(OS_TICK ) 0,
(void *) 0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
OSStart(&err);
while (DEF_ON) { /* Should Never Get Here */
};
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
static void AppTaskStart (void *p_arg)
{
//CPU_TS p_ts;
OS_ERR os_err;
(void)p_arg;
CPU_Init(); /* Init CPU name & int. dis. time measuring fncts. */
Mem_Init(); /* Initialize Memory managment */
BSP_CPU_TickInit(); /* Start Tick Initialization */
Frist_On_Machine();
AppObjCreate(); /* Create Application Kernel Objects */
AppTaskCreate(); /* Create Application Tasks */
OSTimeDlyHMSM(0, 0, 0, 50,
OS_OPT_TIME_HMSM_STRICT, &os_err);
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
while (DEF_ON)
{
// if(UART_1.RX_Count>0)
// {USART_SendData(USART1, UART_1.RX_Buffer[UART_1.RX_Count]);
// UART_1.RX_Count --;
// while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET){} //发送数据寄存器空标志位
// }
OSTimeDlyHMSM(0, 0, 0, 50,
OS_OPT_TIME_HMSM_STRICT, &os_err);
}
}
/*
*********************************************************************************************************
* AppTaskCreate()
*
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
OS_ERR err;
OSTaskCreate((OS_TCB *)&RS232_command_StartTCB, // Create the start task
(CPU_CHAR *)"RS232",
(OS_TASK_PTR ) RS232_command, //任务名称
(void *) 0,
(OS_PRIO ) APP_TASK_START_PRIO , //任务等级
(CPU_STK *)&RS232_command_Task_Stk[0],
(CPU_STK )(APP_TASK_START_STK_SIZE / 10u),
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE,
(OS_MSG_QTY ) 0,
(OS_TICK ) 0,
(void *) 0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
}
static void AppObjCreate (void)
{
OS_ERR err;
OSSemCreate ( &Uart_2_Char_Semp, (CPU_CHAR *)"Uart_2_Char", 0, &err );
OSSemCreate ( &Uart_1_Char_Semp, (CPU_CHAR *)"Uart_1_Char", 0, &err );
OSMutexCreate ( &Uart_2_Mutex, (CPU_CHAR *)"Uart_2_Mut", &err );
OSMutexCreate ( &Uart_1_Mutex, (CPU_CHAR *)"Uart_1_Mut", &err );
}
//====================================================================================================================
#include <includes.h>
uint8_t TX_Buffer[60];
char TX1_Buffer[128];
void RCC_Configuration(void);
void GPIO_Configuration(void);
void UART_1_Init(void);
void UART_2_Init(void);
void Frist_On_Machine(void);
struct UART_STRUCT UART_2;
struct UART_STRUCT UART_1;
//=====================================================================
//=====================================================================
void Frist_On_Machine(void)
{
RCC_Configuration();
GPIO_Configuration();
UART_1_Init();
UART_2_Init();
}
//=====================================================================
//=====================================================================
void RCC_Configuration(void)
{
// __IO uint32_t StartUpCounter = 0
RCC_DeInit(); //复位RCC
RCC_HSEConfig(RCC_HSE_ON); //打开外部告诉晶振
while ((RCC_WaitForHSEStartUp() != SUCCESS)) // && (StartUpCounter != HSE_STARTUP_TIMEOUT)
{}; //等待外部振荡器启动StartUpCounter++;
// if(StartUpCounter == HSE_STARTUP_TIMEOUT)
// {
// RCC_HSICmd(ENABLE);
// RCC_PLLConfig(RCC_PLLSource_HSE,8,120,2,5 ); //Configures the main PLL clock source, multiplication and division factors.
// }
// else
// {
RCC_PLLConfig(RCC_PLLSource_HSE,4,120,2,5 ); //Configures the main PLL clock source, multiplication and division factors.
// }
RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB clock = SYSCLK RCC_SYSCLK_Div1
RCC_PCLK1Config(RCC_HCLK_Div4); // APB1 clock = HCLK
RCC_PCLK2Config(RCC_HCLK_Div2); // APB2 clock = HCLK RCC_HCLK_Div2
RCC_PLLCmd(ENABLE); //使能PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET){} //等待PLL稳定
FLASH_SetLatency(FLASH_Latency_7); // Flash延迟 4 Flash wait states
FLASH_PrefetchBufferCmd (ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设定系统时钟
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL){} // 使用PLL作为系统时钟 system clock
//-------------------------------------------------------------
RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB clock = SYSCLK
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD |
RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH |
RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_CRC |
RCC_AHB1Periph_BKPSRAM,
ENABLE
);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 | RCC_APB1Periph_CAN1| // | RCC_APB1Periph_UART4 | RCC_APB1Periph_UART5
RCC_APB1Periph_SPI2 | RCC_APB1Periph_TIM2| RCC_APB1Periph_TIM3, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM8 |RCC_APB2Periph_USART1 | RCC_APB2Periph_USART6 | RCC_APB2Periph_ADC1 |RCC_APB2Periph_TIM1|
RCC_APB2Periph_ADC3 |RCC_APB2Periph_SDIO |RCC_APB2Periph_TIM11|RCC_APB2Periph_SPI1, ENABLE);
}
//IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====
//IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====IO口初始化====
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //通用输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 和单片机状态灯
GPIO_Init(GPIOG, &GPIO_InitStructure);
//GPIO_SetBits(GPIOG,GPIO_Pin_0);
}
//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====
//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====
void UART_1_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
//------------------------------------------------------------------------------------
NVIC_InitStructure.NVIC_IRQChannel = BSP_INT_ID_USART1; //UART1中断编号
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//------------------------------------------------------------------------------------
USART_InitStructure.USART_BaudRate = 9600;
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;
//------------------------------------------------------------------------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //开漏输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //没有上拉和下拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_TC, ENABLE); //USART_IT_TC: 发送完成 中断允许
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 接收数据寄存器非空(有数据可读) 中断允许
USART_ITConfig(USART1, USART_IT_ERR, ENABLE);
USART_ITConfig(USART1, USART_IT_ORE, ENABLE);
USART_ITConfig(USART1, USART_IT_NE, ENABLE);
USART_ITConfig(USART1, USART_IT_FE, ENABLE);
USART_Cmd(USART1, ENABLE); //使能UART
//===============================================================
DMA_DeInit (DMA2_Stream7);
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR);
DMA_InitStructure.DMA_BufferSize = (uint32_t)(UART_BUFER_SIZE);
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)(TX1_Buffer);
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA2_Stream7, &DMA_InitStructure);
DMA_ClearITPendingBit(DMA2_Stream7, DMA_IT_TCIF7);
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
DMA_Cmd(DMA2_Stream7, ENABLE); //使能DMA
}
//================================================================================
#include <includes.h>
//=====================================================================================
uint16_t USART_RX_STA=0;
uint8_t xxtt;
void BSP_IntHandlerUSART1(void)
{
if(USART_GetITStatus(USART1, USART_IT_PE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_PE);
}
if(USART_GetITStatus(USART1, USART_IT_TXE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_TXE);
}
if(USART_GetITStatus(USART1, USART_IT_TC) == SET) //发送完成中断
{
USART_ClearITPendingBit (USART1, USART_IT_TC); //清除中断标志
// Send_Glag = 0;
// UART_1.RX_Count = 0;
// UART_1.State = RX_START_x10;
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_RXNE); //清除中断标志
receive_ASCII();
}
if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_IDLE); //清除中断标志
}
if(USART_GetITStatus(USART1, USART_IT_LBD) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_LBD);
xxtt = (char)(USART_ReceiveData(USART1));
}
if(USART_GetITStatus(USART1, USART_IT_CTS) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_CTS);
xxtt = (char)(USART_ReceiveData(USART1));
}
if(USART_GetITStatus(USART1, USART_IT_ERR) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_ERR);
xxtt = (char)(USART_ReceiveData(USART1));
}
if(USART_GetITStatus(USART1, USART_IT_ORE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_ORE);
xxtt = (char)(USART_ReceiveData(USART1));
}
if(USART_GetITStatus(USART1, USART_IT_NE) == SET)
{
USART_ClearITPendingBit (USART1, USART_IT_NE);
xxtt = (char)(USART_ReceiveData(USART1));
}
if(USART_GetITStatus(USART1, USART_IT_FE) == SET) //FE: 帧错误
{
USART_ClearITPendingBit (USART1, USART_IT_FE); //清除中断标志
xxtt = (char)(USART_ReceiveData(USART1));
}
}
//=================================================================
#include <includes.h>
OS_TCB UART_2_RX_StartTCB;
CPU_STK UART_2_RX_Task_Stk[APP_TASK_START_STK_SIZE];
OS_ERR err;
CPU_TS p_ts;
//============================================================================================================================
uint16_t uiCmdError;
uint8_t Send_Flag;
uint8_t RX_Check_Buffer[6];
uint8_t RX_Buffer[60];
void UART2_Send(uint8_t *ucFrameBuf, uint8_t ucFrameLen, uint16_t uiCmdError, uint8_t *parameter);
//============================================================================================================================
void RS232_command (void *p_arg)
{
OS_ERR err;
OSTimeDly(10,OS_OPT_TIME_DLY,&err);
GPIO_SetBits(GPIOG,GPIO_Pin_0);
OSTimeDly(500,OS_OPT_TIME_DLY,&err);
while (1)
{
GPIO_ResetBits(GPIOG,GPIO_Pin_0);
OSTimeDly(500,OS_OPT_TIME_DLY,&err);
GPIO_SetBits(GPIOG,GPIO_Pin_0);
OSTimeDly(500,OS_OPT_TIME_DLY,&err);
}
}
//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====
//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====//UART1====
void receive_ASCII(void)
{
uint16_t receive_word;
receive_word = (uint16_t)(USART_ReceiveData(USART1));
UART_1.RX_Buffer[UART_1.RX_Count] = receive_word;
USART_SendData(USART1,receive_word);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET){} //发送数据寄存器空标志位
}
|
|