DMA实验总结
一、RCC设置
没什么好写的之前USART的基本一样
/****************************************************************************
* Function Name : RCC_Configuration
* Description : Sets System clock frequency to 72MHz and configure HCLK, PCLK2
* and PCLK1 prescalers.
* Input : None
* Output : None
* Return : None
****************************************************************************/
void RCC_Configuration(void)
{
/* Deinitialize the RCC registers */
RCC_DeInit(); /* Enable the HSE */
RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready and if Time out is reached exit */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* Add here PLL ans system clock config */ /* Enable The Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Configure Tthe Latency cycle: Set 0 Latency cycles */
FLASH_SetLatency(FLASH_Latency_2); /* Configure HCLK such as HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2); /* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div4); /* PLLCLK = 8MHz * 9 = 72MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */
RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till HSE is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{ }
}
}
二、GPIO设置
设置AP9,AP10为串口。
/****************************************************************************
* Function Name : GPIO_Configuration
* Description :
* Input : None
* Output : None
* Return : None
****************************************************************************/
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); }
三、USART设置
/*******************************************************************************
* Function Name : USART_Configure
* Description : Configures the USART
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void USART_Configuration(void)
{
USART_InitStructure.USART_BaudRate = ; //设置波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置为8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止为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; //设置RX和TX模式
USART_Init(USART1, &USART_InitStructure); //初始化结构体
USART_Cmd(USART1, ENABLE); //开启串口
}
四、DMA设置
/*******************************************************************************
* Function Name : DMA_Configure
* Description : Configures the DMA
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure; //定义DMA结构体 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //开启DMA的RCC DMA_InitStructure.DMA_PeripheralBaseAddr = APB2PERIPH_BASE + 0X3804; //设置DMA外设基地址:串口1的地址+串口1的数据寄存器偏移量 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff; //要发送的内容地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //设置外设作为数据传输的目的地 DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE; //指定DMA缓存大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置外设地址寄存器不递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常缓存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //设置DMA为中优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //不设置为内存到内存传输 DMA_Init(DMA1_Channel4, &DMA_InitStructure); //初始化DMA结构体 DMA_Cmd(DMA1_Channel4, ENABLE); //开启DMA
DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE); //使能DMA1_Channel4作为中断通道,传输完成后中断屏蔽,使能
}
五、设置中断
/****************************************************************************
* Function Name : NVIC_Configuration
* Description : Configures Vector Table base location.
* Input : None
* Output : None
* Return : None
****************************************************************************/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure; #ifdef VET_TAB_RAM
/* Set the Vector Table base location at 0x2000 0000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
/* Set the Vector Table base location at 0x8000 0000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置为组1 NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; //设置DMA1_Channel4为中断源
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ; //优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = ; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure); //初始化
}
在stm32f10x_it.c中加入:
void DMA1_Channel4_IRQHandler(void)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET) //如果中断源是设置了
{
DMA_ClearFlag(DMA1_FLAG_TC4); //清除中断
}
}
六、main函数
/****************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/
int main(void)
{
RCC_Configuration(); NVIC_Configuration(); GPIO_Configuration(); USART_Configuration(); DMA_Configuration(); while()
{
GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)( - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
fPutString("Hello World!", );
Delay(0xffffff);
}
} /****************************************************************************
* Function Name : fPutString
* Description : Send a string.
* Input : None
* Output : None
* Return : None
****************************************************************************/
void fPutString(u8 *buf, u8 len)
{
u8 i;
for(i=;i<len;i++)
{
fPutChar(*buf++);
}
} /****************************************************************************
* Function Name : fPutChar
* Description : Send a byte
* Input : None
* Output : None
* Return : None
****************************************************************************/
u8 fPutChar(u8 ch)
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{ }
return ch;
}
- /*******************************************************************************
- * Function Name : USART_Configure
- * Description : Configures the USART
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void USART_Configuration(void)
- {
- USART_InitStructure.USART_BaudRate = 115200;
- 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;
- USART_Init(USART1, &USART_InitStructure);
- USART_Cmd(USART1, ENABLE);
- }
DMA实验总结的更多相关文章
- 【GMT43智能液晶模块】例程十:DMA实验——存储器到存储器的传输
实验原理: DMA(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DMA2控制器的数据流0,选用通道0进行数据传输.通过液晶控制传输 和结果显示. 示例截图 ...
- 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输
实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...
- 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输
实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...
- 嵌入式单片机stm32之DMA实验
一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道 每个通道都可以配置一些外设的地址. 二. 通道的配置过程: 1. 首先设置CPARx寄存器和CMARx寄存器 ...
- 【iCore3 双核心板】例程十一:DMA实验——存储器到存储器的传输
实验指导书及代码包下载: http://pan.baidu.com/s/1bcY5JK iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...
- niosii dma实验中的一点感想
1,使用nios给出的驱动函数的顺序一般为1,清中断2,写控制寄存器,3,写参数寄存器4,中断注册,5,开始工作.因为开始工作控制位在控制寄存器中,所以会想到到最后一块写,省事,但是在dma试验中发现 ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...
- 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24
[iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...
- 【资料下载区】【iCore1S相关代码、资料下载地址】更新日期2017/10/09
[iCore1S相关文档][更新中...] iCore1S原理图(PDF)下载iCore1S引脚注释(PDF)下载 [iCore1S相关例程代码][ARM][更新中...] DEMO1.0测试程序发布 ...
随机推荐
- webpack对icon-font图片的处理
一.对图片的处理 安装url-loader 然后再loaderli配置这样会把图片打包成base64格式 { test: /\.(gif|png|jpg)\??.*$/, loader: 'url-l ...
- HDU 6050 Funny Function —— 2017 Multi-University Training 2
Funny Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- linux0.11内核源码——用户级线程及内核级线程
参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...
- 在python3.7下怎么安装matplotlib与numpy
一.安装matplotlib 1.在Matplotlib的官网下载电脑对应的版本,网址为:https://pypi.org/project/matplotlib/#files 2.将在下载的.whl文 ...
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- Unity获取Android和iOS手机系统电量及网络状况
最开始考虑使用中间静态链接库来调用手机系统自带的API,但是在研究的过程中发现Android系统将电量等信息记录在了固定的文件中,所以只需要在C#中直接读取就可以而不需要中间库. a.Android版 ...
- Android(一)Android Eclipse环境搭建
SDK Manager下载实在是太慢了,不知道什么时候能下完,所以我是通过手工下载的. Android SDK 手工下载各个包然后解压到Android对应的目录 API对应的是platforms目录 ...
- 网关中加入熔断机制(Hystrix)
网关中加入熔断机制 在网关中加入熔断机制 添加依赖项 spring-cloud-gateway项目POM文件加入spring-cloud-starter-netflix-hystrix <dep ...
- VINS 估计器之优化与边缘化
VINS的优化除了添加了投影残差,回环检测残差,还有IMU的残差,边缘化产生的先验信息残差等.有些比较难理解,可参考此博客和知乎回答. void Estimator::optimization() { ...
- SpringBoot2.x整合定时任务和异步任务处理
SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...