完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*---------------------------------------------------------------------------------------------------------*/
/* */ /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved. */ /* */ /*---------------------------------------------------------------------------------------------------------*/ //*********************************************************************************************************** // Website: http://www.nuvoton.com // E-Mail : MicroC-8bit@nuvoton.com //*********************************************************************************************************** #include "ML51.h" /** * @brief PDMA receiv from UART2(SC0) RX demo. * @param None * @return None * @Details after PDMA transfer done UART2 RX data in XRAM 0x100 start area. */ unsigned char xdata RxDatabuffer[100] _at_ 0x100; unsigned char ct; void PDMA0_ISR(void) interrupt 20 // Vector @ 0xA3 { PDMA_Close(PDMA0); SFRS=0;DMA0TSR=0; printf (" \n PDMA receiv UART2 RX finish! " ); } void main (void) { /* Enable UART0 for printf function*/ MFP_P31_UART0_TXD; P31_QUASI_MODE; UART_Open(24000000,UART0_Timer3,115200); ENABLE_UART0_PRINTF; /* Enable UART2 RX */ MFP_P55_UART2_RXD; P55_INPUT_MODE; UART_Open(24000000,UART2,115200); /* Clear XRAM base address area to 00h */ for(ct=0;ct<10;ct++) { RxDatabuffer[ct]=0; } /* Define PMDA function as UART RX to memory, define base address and PDMA receive length */ PDMA_Open(PDMA0,SMCRX,0x100,100); /* Define interrupt after full transfer */ PDMA_Interrupt_Enable(PDMA0,PDMAFULLINT); /* Global interrupt enable */ ENABLE_GLOBAL_INTERRUPT; /* Start PDMA transfer */ PDMA_Run(PDMA0); while(1); } |
|
相关推荐
1个回答
|
|
sp; */
#include "stm32f10x.h" #include "stdio.h" #define BUF_SIZE 1024 char rx_buf[BUF_SIZE]; //定义接收缓存区 uint16_t rx_data_len = 0; //接收数据长度 /*--------------------------------------函数声明-----------------------------------------*/ void USART1_Config(void); void NVIC_Configuration(void); void USART1_IRQHandler(void); void USART_SendChar(USART_TypeDef* USARTx, uint8_t ch); void USART_SendString(USART_TypeDef* USARTx, char *str); /*--------------------------------------主函数-----------------------------------------*/ int main(void) { SystemInit(); //系统时钟初始化 NVIC_Configuration(); //中断优先级初始化 USART1_Config(); while (1) { } } /*--------------------------------------函数定义-----------------------------------------*/ /** * @brief 串口1初始化配置 * */ void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); //使能串口1和GPIOA时钟 //USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA.9 //USART1_RX PA.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA10 //USART 初始化设置 USART_InitStructure.USART_BaudRate = 9600; //波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式 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); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口1接收中断 USART_Cmd(USART1, ENABLE); //使能串口1 } /** * @brief 中断优先级初始化 * */ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组2:2位前优先级,2位后子优先级 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择USART1的的中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级为2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级为3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道 NVIC_Init(&NVIC_InitStructure); //应用配置好的NVIC_InitStructure配置信息 } /** * @brief USART1接收中断处理函数 * */ void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断是否是USART1接收中断产生 { char data = USART_ReceiveData(USART1); //将接收到的数据存到data变量中 if (rx_data_len < BUF_SIZE) //如果接收缓存区未满 { rx_buf[rx_data_len++] = data; //将接收到的数据写入接收缓存区 } } } /** * @brief 发送单个字符 * * @param USARTx USART1 或 USART2 * @param ch 要发送的字符 */ void USART_SendChar(USART_TypeDef* USARTx, uint8_t ch) { while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); //等待发送区空 USART_SendData(USARTx, ch); //发送一个字符 } /** * @brief 发送字符串 * * @param USARTx USART1 或 USART2 * @param str 要发送的字符串 */ void USART_SendString(USART_TypeDef* USARTx, char *str) { while (*str) { USART_SendChar(USARTx, *str++); //逐个字符发送 } } |
|
|
|
只有小组成员才能发言,加入小组>>
710 浏览 0 评论
1120 浏览 1 评论
2497 浏览 5 评论
2836 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2677 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
662浏览 9评论
673浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
791浏览 6评论
638浏览 5评论
681浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 05:59 , Processed in 0.961108 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号