void control_init(void) { init_gpio(); init_pwm(); LPLD_UART_Init(UART2, 115200); //裁判机 LPLD_UART_RIE_Enable(UART2, uart2_recv_isr); while (!GetCmdAction()); while(1) { right_set_v(V_SLOW); left_set_v(V_SLOW); scan_infrared(r1, r2, r3, r4); if(IS_AT_CORNER()) break; } motor_time_wait = 0; while (1) { if(motor_time_wait < 100000)//等待电机反应时间 不然直接下一步有影响 没有彻底停下来 { motor_time_wait ++; right_set_v(0); left_set_v(0); } else { motor_time_wait = 0; break; } } can_interrupt = 1; //计时器寄存器每减少50过1us LPLD_UART_Init(UART1, 19200); //读卡器 LPLD_UART_Init(UART3, 9600); //蓝牙 LPLD_UART_Init(UART4, 9600); LPLD_UART_Init(UART5, 19200); //读卡器 LPLD_UART_RIE_Enable(UART1, uart1_recv_isr); LPLD_UART_RIE_Enable(UART3, uart3_recv_isr); //LPLD_UART_RIE_Enable(UART4, uart4_recv_isr); LPLD_UART_RIE_Enable(UART5, uart5_recv_isr); LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT1, IRQ_DISABLE, NULL); //UP_LCD_Init(); //初始化LCD LPLD_ADC_Init(ADC0, MODE_16, CONV_SING); memset(control_callbacks, NULL, sizeof(control_callbacks)); memset(r1, 0, sizeof(r1)); memset(r2, 0, sizeof(r2)); memset(r3, 0, sizeof(r3)); memset(r4, 0, sizeof(r4)); LPLD_PIT_Init(PIT0, 5000, pit_isr0); //电机控制 LPLD_PIT_Init(PIT1, 100000, pit_isr1); //计时 TIME_PASSED = 0; }
//---------------------------------------------------------------------------------------------------- void UART_Init(void) { uart_init_struct.UART_Uartx = UART4; uart_init_struct.UART_BaudRate = 115200; uart_init_struct.UART_RxPin =PTE25; //接收引脚 uart_init_struct.UART_TxPin =PTE24; //发送引脚 LPLD_UART_Init(uart_init_struct); }
/* * 初始化UART5模块 * */ void uart_init(void) { uart0_init_struct.UART_Uartx = UART0; //使用UART5 uart0_init_struct.UART_BaudRate = 9600; //设置波特率9600 uart0_init_struct.UART_RxPin = PTB16; //接收引脚为PTE9 uart0_init_struct.UART_TxPin = PTB17; //发送引脚为PTE8 uart0_init_struct.UART_RxIntEnable = TRUE; //使能接收中断 uart0_init_struct.UART_RxIsr = uart_isr; //设置接收中断函数 //初始化UART LPLD_UART_Init(uart0_init_struct); //使能UART中断 LPLD_UART_EnableIrq(uart0_init_struct); }
void uart4_bluetooth_init(void) { uart4_init_struct.UART_Uartx = UART4; //使用UART5 uart4_init_struct.UART_BaudRate = 115200; //设置波特率115200 uart4_init_struct.UART_RxPin = PTE25; //接收引脚为PTE25 uart4_init_struct.UART_TxPin = PTE24; //发送引脚为PTE24 uart4_init_struct.UART_RxIntEnable = TRUE; //使能接收中断 uart4_init_struct.UART_RxIsr = uart4_isr; //设置接收中断函数 //初始化UART LPLD_UART_Init(uart4_init_struct); LPLD_UART_EnableIrq(uart4_init_struct); LPLD_UART_PutCharArr(UART4, "Initial uart4 successful.\r\n", 29); }
void uart_interr_init() { UART_InitTypeDef term_port_structure={0}; term_port_structure.UART_Uartx = TERM_PORT; term_port_structure.UART_BaudRate = TERMINAL_BAUD; term_port_structure.UART_RxPin = PTA15; term_port_structure.UART_TxPin = PTA14; term_port_structure.UART_RxIntEnable = TRUE; //使能接收中断 term_port_structure.UART_RxIsr = uart_isr; //设置接收中断函数 LPLD_UART_Init(term_port_structure); LPLD_UART_EnableIrq(term_port_structure); //Enable uart interrupt }
/* * 初始化UART5模块 * */ void uart_init(void) { uart5_init_struct.UART_Uartx = UART5; //使用UART5 uart5_init_struct.UART_BaudRate = 9600; //设置波特率9600 uart5_init_struct.UART_RxPin = PTE9; //接收引脚为PTE9 uart5_init_struct.UART_TxPin = PTE8; //发送引脚为PTE8 #if USE_FIFO_Tx_Rx == USE uart5_init_struct.RxFIFO.FIFO_Enable = TRUE; uart5_init_struct.TxFIFO.FIFO_Enable = TRUE; uart5_init_struct.RxFIFO.FIFO_WaterMark = 1; uart5_init_struct.RxFIFO.FIFO_BufFlow_IntEnable = TRUE; uart5_init_struct.TxFIFO.FIFO_WaterMark = 1; uart5_init_struct.TxFIFO.FIFO_BufFlow_IntEnable = TRUE; #endif #if USE_DMA_Tx_Rx == USE uart5_init_struct.UART_RxDMAEnable = TRUE; //使能接收DMA uart5_init_struct.UART_TxDMAEnable = TRUE; //使能发送DMA //配置接收DMA uart_rev_dma_init_struct.DMA_CHx = DMA_CH0; //选择DMA CH0作为通道 uart_rev_dma_init_struct.DMA_MajorLoopCnt = sizeof(recv_ram_buf); //设置计数器长度为数组长度 uart_rev_dma_init_struct.DMA_MinorByteCnt = 1; //设置每次的长度为byte uart_rev_dma_init_struct.DMA_MajorCompleteIntEnable = TRUE; //设置DMA 计数器清零中断 uart_rev_dma_init_struct.DMA_Req = UART5_REV_DMAREQ; //设置DMA 请求为 UART rev uart_rev_dma_init_struct.DMA_DestAddr = (uint32)recv_ram_buf; //设置目的地址为 recv_ram_buf uart_rev_dma_init_struct.DMA_DestAddrOffset = 1; //每一次DMA请求,地址加1 uart_rev_dma_init_struct.DMA_DestDataSize = DMA_DST_8BIT; //设置目的长度为byte uart_rev_dma_init_struct.DMA_SourceAddr = (uint32)&UART5->D;//设置UART D为源地址 uart_rev_dma_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT; //设置源长度为byte uart_rev_dma_init_struct.DMA_AutoDisableReq = FALSE; //循环接收 uart_rev_dma_init_struct.DMA_Isr = dma_isr; //配置发送DMA uart_trn_dma_init_struct.DMA_CHx = DMA_CH1; //选择DMA CH0作为通道 uart_trn_dma_init_struct.DMA_MajorLoopCnt = sizeof(recv_ram_buf); //设置计数器长度为数组长度 uart_trn_dma_init_struct.DMA_MinorByteCnt = 1; //设置每次的长度为byte uart_trn_dma_init_struct.DMA_MajorCompleteIntEnable = FALSE; //清空DMA 计数器清零中断 uart_trn_dma_init_struct.DMA_Req = UART5_TRAN_DMAREQ;//设置DMA 请求为 UART trn uart_trn_dma_init_struct.DMA_SourceAddr = (uint32)recv_ram_buf; //设置目的地址为 recv_ram_buf uart_trn_dma_init_struct.DMA_SourceAddrOffset = 1; //每一次DMA请求,地址加1 uart_trn_dma_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT; //设置源长度为byte uart_trn_dma_init_struct.DMA_DestAddr = (uint32)&UART5->D;//设置UART D为源地址 uart_trn_dma_init_struct.DMA_DestDataSize = DMA_DST_8BIT; //设置目的长度为byte uart_trn_dma_init_struct.DMA_AutoDisableReq = TRUE; //禁止循环发送 LPLD_DMA_Init(uart_rev_dma_init_struct); //初始化DMA 接收 LPLD_DMA_Init(uart_trn_dma_init_struct); //初始化DMA 发送 LPLD_DMA_EnableReq(DMA_CH0); //使能DMA请求 LPLD_DMA_EnableIrq(uart_rev_dma_init_struct); //使能DMA CH0中断 #endif uart5_init_struct.UART_RxIntEnable = TRUE; //使能接收中断 uart5_init_struct.UART_TxIntEnable = TRUE; //使能发送中断 uart5_init_struct.UART_RxIsr = uart_isr; //设置接收中断函数 LPLD_UART_Init(uart5_init_struct); //初始化UART #if USE_DMA_Tx_Rx != USE //使能UART中断 LPLD_UART_EnableIrq(uart5_init_struct); #endif }