1 void USART3_Configuration(void) //串口3配置---S
2 {
3 DMA_InitTypeDef DMA_InitStructure;
4 USART_InitTypeDef USART_InitStructure;
5 GPIO_InitTypeDef GPIO_InitStructure;
6 NVIC_InitTypeDef NVIC_InitStructure;
7 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
8 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2, ENABLE);
9 //USART1
10 //TX
11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
13 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
14 GPIO_Init(GPIOB, &GPIO_InitStructure);
15 //RX
16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
17 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
18 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
19 GPIO_Init(GPIOB, &GPIO_InitStructure);
20
21 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR);
22 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_code_rece;
23 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
24 DMA_InitStructure.DMA_BufferSize = 4000;
25 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
26 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
27 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord
28 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
29 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; // DMA_Mode_Normal
30 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High
31 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
32 DMA_Init(DMA1_Channel3, &DMA_InitStructure);
33
34 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR);
35 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_send_data;
36 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
37 DMA_InitStructure.DMA_BufferSize = 14;
38 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
39 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
40 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord
41 DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;
42 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ; // DMA_Mode_Normal
43 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High
44 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
45 DMA_Init(DMA1_Channel2, &DMA_InitStructure);
46
47 USART_OverSampling8Cmd(USART3, ENABLE);
48 USART_InitStructure.USART_BaudRate = 460800;
49 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
50 USART_InitStructure.USART_StopBits = USART_StopBits_1;
51 USART_InitStructure.USART_Parity = USART_Parity_No;
52 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
53 USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
54 USART_Init(USART3, &USART_InitStructure);
55
56 //NVIC 设置,使能中断
57 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择中断分组1
58
59 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //选择串口3中断
60 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为1
61 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为1
62 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
63 NVIC_Init(&NVIC_InitStructure);
64 USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//开启中断
65
66 USART_DMACmd(USART3,USART_DMAReq_Rx,ENABLE);
67 USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE);
68 DMA_Cmd(DMA1_Channel3, ENABLE);
69 USART_Cmd(USART3, ENABLE);
70 USART3->SR;
71 USART3->DR;
72 }
73
74 DmaSendDataProc( DMA1_Channel2, 14 );
75 //开启一次DMA传输
76 void DmaSendDataProc(DMA_Channel_TypeDef *DMA_Streamx,u16 ndtr)
77 {
78
79 DMA_Cmd(DMA_Streamx, DISABLE); //关闭DMA传输
80
81 DMA_SetCurrDataCounter(DMA_Streamx,ndtr); //数据传输量
82
83 DMA_Cmd(DMA_Streamx, ENABLE); //开启DMA传输
84
85 }
86 void USART3_IRQHandler(void) //客户端传来数据
87 {
88 if(USART_GetFlagStatus(USART3, USART_FLAG_IDLE)==SET) //RXNE一个字节接收完成标志位,
89 {
90 DMA_Cmd(DMA1_Channel3, DISABLE); //关闭DMA输出
91
92 usart2_num = 2000 - DMA1_Channel3 ->CNDTR; //获取读到的字节数
93 //处理数据
94 DMA1_Channel3->CNDTR = 2000; //重新填充
95 DMA_Cmd(DMA1_Channel3, ENABLE); //开启DMA传输
96 }
97
98 USART_ClearITPendingBit(USART3, USART_IT_IDLE); //清除接收中断标志位
99 USART3->SR;
100 USART3->DR;
101
102 }

最新文章

  1. TMethod
  2. 关于怎样解决eclipse打开时出现的Failed to load the JNIshared library亲测有效
  3. 微信网页授权,微信登录,oauth2
  4. “耐撕”团队 2016.04.11 站立会议
  5. Python实用工具包Scrapy安装教程
  6. JavaScript 变量、作用域和内存问题
  7. hdu 3951 Coin Game 博弈论
  8. hadoop拾遗(五)---- mapreduce 输出到多个文件 / 文件夹
  9. iOS开发——UI篇OC篇&UITableView多项选择
  10. 标准库function类型的使用
  11. HihoCoder——Trie树
  12. filezilla里怎么解决中文乱码问题
  13. 办公楼[POI2007]
  14. SQL FOR XML PATH 和 Stuff 用法
  15. django一般架构思维导图
  16. 蓝桥杯 错误票据 (stringstream的使用)
  17. Neutron FWaaS 原理
  18. python类的继承和多态
  19. HDU 6395 Sequence 【矩阵快速幂 && 暴力】
  20. ASP.NET Core 2.2 基础知识(十三) WebAPI 概述

热门文章

  1. mingw编译opencv动态链接库和静态链接库及使用方法
  2. Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.
  3. x=x+=x-=x-x;
  4. js中数组追加和删除
  5. 使用mysqldump备份与还原的mysql数据库
  6. Python开发Brup插件检测SSRF漏洞和URL跳转
  7. ClickHouse入门教程
  8. 一文了解 Dubbo 的代码架构
  9. 详解JAVA线程问题诊断工具Thread Dump
  10. sqlSession封装以及CRUD的实现