#include "uart.h" #include "gpio.h" #include "usmart.h" unsigned char UART1_temp[UART0_RECV_BUFF_LEN_MAX] = {0}; // USART1½ÓÊÕÊý¾Ý»º´æ uint8_t USART1_RX_BUF[UART0_RECV_BUFF_LEN_MAX] = {0}; u16 USART_RX_STA = 0; //½ÓÊÕ״̬±ê¼Ç //void Usmart_RecvDataProcess(UC_RECV_PARA_T *usmart_recv_para_p) //{ // // USMARTͨѶ // if (usmart_recv_para_p->uc_recv_flag) // { // usmart_recv_para_p->uc_recv_flag = RESET; // //×îºóÁ½¸öÊý¾ÝҪΪ»Ø³µºÍ»»ÐÐ // if (usmart_recv_para_p->uc_recv_buf_union.uc_recv_buf[usmart_recv_para_p->uc_recv_length - 1] == 0x0A && // usmart_recv_para_p->uc_recv_buf_union.uc_recv_buf[usmart_recv_para_p->uc_recv_length - 2] == 0x0D) // { // USART_RX_STA = 0xC000 | (usmart_recv_para_p->uc_recv_length - 2); // memcpy(USART1_RX_BUF, usmart_recv_para_p->uc_recv_buf_union.uc_recv_buf, usmart_recv_para_p->uc_recv_length); // usmart_dev.scan(); //Ö´ÐÐusmartɨÃè // memset(usmart_recv_para_p->uc_recv_buf_union.uc_recv_buf, 0, sizeof(usmart_recv_para_p->uc_recv_buf_union.uc_recv_buf)); // } // else // { // usmart_recv_para_p->uc_recv_flag = SET; // USART_RX_STA = 0; // } // } //} //ÖØÐ´Õâ¸öº¯Êý,ÖØ¶¨Ïòprintfº¯Êýµ½´®¿Ú£¬Òâ˼¾ÍÊÇ˵printfÖ±½ÓÊä³öµ½´®¿Ú£¬ÆäĬÈÏÊä³öµ½¿ØÖÆÌ¨µÄ /*fputc*/ int fputc(int c, FILE *f) { uint8_t ch; ch = c; UARTx_TXBUF_Write(UART0,ch);//·¢ËÍ´®¿Ú while(RESET == UARTx_ISR_TXSE_Chk(UART0)) ; //µÈ´ý·¢ËÍÍê³É return ch; } //ÖØ¶¨Ïòscanfº¯Êýµ½´®¿Ú Òâ˼¾ÍÊÇ˵½ÓÊÜ´®¿Ú·¢¹ýÀ´µÄÊý¾Ý£¬ÆäĬÈÏÊǽÓÊÜ¿ØÖÆÌ¨µÄÊý¾Ý /*fgetc*/ // int fgetc(FILE * F) //{ // uint8_t ch_r; // HAL_UART_Receive (&huart4,&ch_r,1,0xffff);//½ÓÊÕ // return ch_r; // } /*DMAÖжϻص÷º¯Êý£¬º¯ÊýÃûÔÚstartup_xxxx.sÆô¶¯ÎļþÖÐѰÕÒ*/ void DMA_IRQHandler(void) { if((ENABLE == DMA_CHxCR_CHxFTIE_Getable(DMA_CH7)) &&(SET == DMA_ISR_DMACHFT_Chk(DMA_CH7))) { //Çå³ýÖжϱêÖ¾ DMA_ISR_DMACHFT_Clr(DMA_CH7); } } void Uart0_Init(void) { UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓÐ¹Ø /*UART0 IO ÅäÖÃ*/ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý AltFunIO(IR_RX_PORT, IR_RX_PIN, ALTFUN_NORMAL); //PF3 UART0 RX AltFunIO(IR_TX_PORT, IR_TX_PIN, ALTFUN_NORMAL); //PF4 UART0 TX //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ Ö»ÓÐUART0¡¢1ÐèҪѡÔñ ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª Ö±½Ó×¢Êͼ´¿É UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK; //UART0¹¤×÷ʱÖÓÑ¡Ôñ UART_para.BaudRate = 115200; UART_para.DataBit = Eight8Bit; //Êý¾ÝλÊý UART_para.ParityBit = NONE; //ÆæÅ¼Ð£Ñé UART_para.StopBit = OneBit; //ֹͣλ CMU_GetClocksFreq(&CMU_Clocks); //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ UART_SInit(UART0, &UART_para,&CMU_Clocks); //³õʼ»¯uart // UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖà // UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖà /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/ NVIC_DisableIRQ(UART0_IRQn); // NVIC_SetPriority(UART0_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖà // NVIC_EnableIRQ(UART0_IRQn); //ÖжϷþÎñº¯Êý¿ª UARTx_CSR_RXEN_Setable(UART0, ENABLE); //´ò¿ª½ÓÊÕʹÄÜ UARTx_CSR_TXEN_Setable(UART0, ENABLE); //´ò¿ª·¢ËÍʹÄÜ UARTx_ISR_RXBF_Clr(UART0); } void Uart3_Init(void) { UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓÐ¹Ø /*UART0 IO ÅäÖÃ*/ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý AltFunIO(MAIN_TX_PORT, MAIN_TX_PIN, ALTFUN_NORMAL); AltFunIO(MAIN_RX_PORT, MAIN_RX_PIN, ALTFUN_NORMAL); //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ Ö»ÓÐUART0¡¢1ÐèҪѡÔñ ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª Ö±½Ó×¢Êͼ´¿É // UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK; //UART0¹¤×÷ʱÖÓÑ¡Ôñ UART_para.BaudRate = 115200; UART_para.DataBit = Eight8Bit; //Êý¾ÝλÊý UART_para.ParityBit = NONE; //ÆæÅ¼Ð£Ñé UART_para.StopBit = OneBit; //ֹͣλ CMU_GetClocksFreq(&CMU_Clocks); //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ UART_SInit(UART3, &UART_para,&CMU_Clocks); //³õʼ»¯uart // UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖà // UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖà /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/ NVIC_DisableIRQ(UART3_IRQn); // NVIC_SetPriority(UART3_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖà // NVIC_EnableIRQ(UART3); //ÖжϷþÎñº¯Êý¿ª UARTx_CSR_RXEN_Setable(UART3, ENABLE); //´ò¿ª½ÓÊÕʹÄÜ UARTx_CSR_TXEN_Setable(UART3, ENABLE); //´ò¿ª·¢ËÍʹÄÜ UARTx_ISR_RXBF_Clr(UART3); } void Uart5_Init(void) { UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓÐ¹Ø /*UART0 IO ÅäÖÃ*/ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý AltFunIO(GPRS_TX_PORT, GPRS_TX_PIN, ALTFUN_NORMAL); AltFunIO(GPRS_RX_PORT, GPRS_RX_PIN, ALTFUN_NORMAL); //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ Ö»ÓÐUART0¡¢1ÐèҪѡÔñ ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª Ö±½Ó×¢Êͼ´¿É // UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK; //UART0¹¤×÷ʱÖÓÑ¡Ôñ UART_para.BaudRate = 115200; UART_para.DataBit = Eight8Bit; //Êý¾ÝλÊý UART_para.ParityBit = NONE; //ÆæÅ¼Ð£Ñé UART_para.StopBit = OneBit; //ֹͣλ CMU_GetClocksFreq(&CMU_Clocks); //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ UART_SInit(UART5, &UART_para,&CMU_Clocks); //³õʼ»¯uart // UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖà // UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖà /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/ NVIC_DisableIRQ(UART5_IRQn); // NVIC_SetPriority(UART5_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖà // NVIC_EnableIRQ(UART5_IRQn); //ÖжϷþÎñº¯Êý¿ª UARTx_CSR_RXEN_Setable(UART5, ENABLE); //´ò¿ª½ÓÊÕʹÄÜ UARTx_CSR_TXEN_Setable(UART5, ENABLE); //´ò¿ª·¢ËÍʹÄÜ UARTx_ISR_RXBF_Clr(UART5); } void Uart0_RX_DMA_CH7_Init(void) { // DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå // // CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ // DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ // // DMA_InitStructure.CHx = DMA_CH7;//DMAͨµÀºÅÉèÖà // DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖà // DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò // DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH7SSEL_UART0_RX;//ÍâÉèͨµÀÑ¡Ôñ // DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖà // DMA_InitStructure.CHxTSIZE = UC_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È // DMA_InitStructure.CHxRAMAD = (uint32)uc_recv_para_g.uc_recv_buf_union.uc_recv_buf;//Ä¿±êµØÖ· // DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í // // DMA_InitStructure.CHxFTIE = DISABLE; //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_InitStructure.CHxHTIE = DISABLE; //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ // DMA_InitStructure.CHxEN = ENABLE; //ͨµÀʹÄÜ // // NVIC_DisableIRQ(DMA_IRQn); //// NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖà //// NVIC_EnableIRQ(DMA_IRQn); // //// DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_ISR_DMACHFT_Clr(DMA_CH7); // DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë } void Uart3_RX_DMA_CH1_Init(void) { // DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå // // CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ // DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ // // DMA_InitStructure.CHx = DMA_CH1;//DMAͨµÀºÅÉèÖà // DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖà // DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò // DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH1SSEL_UART3_RX;//ÍâÉèͨµÀÑ¡Ôñ // DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖà // DMA_InitStructure.CHxTSIZE = INTER_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È // DMA_InitStructure.CHxRAMAD = (uint32)inter_recv_para_g.inter_recv_union.inter_recv_buf;//Ä¿±êµØÖ· // DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í // // DMA_InitStructure.CHxFTIE = DISABLE; //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_InitStructure.CHxHTIE = DISABLE; //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ // DMA_InitStructure.CHxEN = ENABLE; //ͨµÀʹÄÜ // // NVIC_DisableIRQ(DMA_IRQn); //// NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖà //// NVIC_EnableIRQ(DMA_IRQn); // //// DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_ISR_DMACHFT_Clr(DMA_CH1); // DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë } void Uart5_RX_DMA_CH5_Init(void) { // DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå // // CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ // DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ // // DMA_InitStructure.CHx = DMA_CH5;//DMAͨµÀºÅÉèÖà // DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖà // DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò // DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH5SSEL_UART5_RX;//ÍâÉèͨµÀÑ¡Ôñ // DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖà // DMA_InitStructure.CHxTSIZE = GPRS_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È // DMA_InitStructure.CHxRAMAD = (uint32)gprs_module_para_g.gprs_recv_buf;//Ä¿±êµØÖ· // DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í // // DMA_InitStructure.CHxFTIE = DISABLE; //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_InitStructure.CHxHTIE = DISABLE; //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ // DMA_InitStructure.CHxEN = ENABLE; //ͨµÀʹÄÜ // // NVIC_DisableIRQ(DMA_IRQn); //// NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖà //// NVIC_EnableIRQ(DMA_IRQn); // //// DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ // DMA_ISR_DMACHFT_Clr(DMA_CH5); // DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë } /*ÆÕͨ£¨×èÈûʽ£©·¢ËÍÊý¾Ý*/ void UARTx_SendData_Normal(UART_Type* UARTx,uint8_t * pSendData,uint16_t send_len) { for(uint16_t i= 0; i < send_len; i++) { UARTx_TXBUF_Write(UARTx, pSendData[i]); //½«·¢ËÍÊý¾ÝдÈë·¢ËͼĴæÆ÷ while(RESET == UARTx_ISR_TXSE_Chk(UARTx)); //µÈ´ý·¢ËÍÍê³É } } void UARTx_SendData_IT(void) { } void UARTx_SendData_DMA(void) { }