一、RCC设置

没什么好写的之前USART的基本一样

  1. /****************************************************************************
  2. * Function Name : RCC_Configuration
  3. * Description : Sets System clock frequency to 72MHz and configure HCLK, PCLK2
  4. * and PCLK1 prescalers.
  5. * Input : None
  6. * Output : None
  7. * Return : None
  8. ****************************************************************************/
  9. void RCC_Configuration(void)
  10. {
  11. /* Deinitialize the RCC registers */
  12. RCC_DeInit();
  13.  
  14. /* Enable the HSE */
  15. RCC_HSEConfig(RCC_HSE_ON);
  16.  
  17. /* Wait till HSE is ready and if Time out is reached exit */
  18. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  19. if(HSEStartUpStatus == SUCCESS)
  20. {
  21. /* Add here PLL ans system clock config */
  22.  
  23. /* Enable The Prefetch Buffer */
  24. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  25.  
  26. /* Configure Tthe Latency cycle: Set 0 Latency cycles */
  27. FLASH_SetLatency(FLASH_Latency_2);
  28.  
  29. /* Configure HCLK such as HCLK = SYSCLK */
  30. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  31.  
  32. /* PCLK2 = HCLK */
  33. RCC_PCLK2Config(RCC_HCLK_Div1);
  34.  
  35. /* PCLK1 = HCLK/2 */
  36. RCC_PCLK1Config(RCC_HCLK_Div2);
  37.  
  38. /* ADCCLK = PCLK2/4 */
  39. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  40.  
  41. /* PLLCLK = 8MHz * 9 = 72MHz */
  42. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  43.  
  44. /* Enable PLL */
  45. RCC_PLLCmd(ENABLE);
  46.  
  47. /* Wait till PLL is ready */
  48. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  49.  
  50. /* Select PLL as system clock source */
  51. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till HSE is used as system clock source */
  52. while(RCC_GetSYSCLKSource() != 0x08)
  53. {
  54.  
  55. }
  56. }
  57. }

二、GPIO设置

 

设置AP9,AP10为串口。

  1. /****************************************************************************
  2. * Function Name : GPIO_Configuration
  3. * Description :
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. void GPIO_Configuration(void)
  9. {
  10. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);
  11.  
  12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  13. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  14. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15. GPIO_Init(GPIOA, &GPIO_InitStructure);
  16.  
  17. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  18. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  19. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20. GPIO_Init(GPIOA, &GPIO_InitStructure);
  21.  
  22. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  23. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  24. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  25. GPIO_Init(GPIOB, &GPIO_InitStructure);
  26.  
  27. }

三、USART设置

 
  1. /*******************************************************************************
  2. * Function Name : USART_Configure
  3. * Description : Configures the USART
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void USART_Configuration(void)
  9. {
  10. USART_InitStructure.USART_BaudRate = ; //设置波特率
  11. USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置为8位
  12. USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止为1位
  13. USART_InitStructure.USART_Parity = USART_Parity_No; //没有校验位
  14. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //没有流控
  15. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //设置RX和TX模式
  16. USART_Init(USART1, &USART_InitStructure); //初始化结构体
  17. USART_Cmd(USART1, ENABLE); //开启串口
  18. }

四、DMA设置

 
  1. /*******************************************************************************
  2. * Function Name : DMA_Configure
  3. * Description : Configures the DMA
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void DMA_Configuration(void)
  9. {
  10. DMA_InitTypeDef DMA_InitStructure; //定义DMA结构体
  11.  
  12. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //开启DMA的RCC
  13.  
  14. DMA_InitStructure.DMA_PeripheralBaseAddr = APB2PERIPH_BASE + 0X3804; //设置DMA外设基地址:串口1的地址+串口1的数据寄存器偏移量
  15.  
  16. DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff; //要发送的内容地址
  17.  
  18. DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //设置外设作为数据传输的目的地
  19.  
  20. DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE; //指定DMA缓存大小
  21.  
  22. DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置外设地址寄存器不递增
  23.  
  24. DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增
  25.  
  26. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度为8位
  27.  
  28. DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
  29.  
  30. DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常缓存模式
  31.  
  32. DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //设置DMA为中优先级
  33.  
  34. DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //不设置为内存到内存传输
  35.  
  36. DMA_Init(DMA1_Channel4, &DMA_InitStructure); //初始化DMA结构体
  37.  
  38. DMA_Cmd(DMA1_Channel4, ENABLE); //开启DMA
  39. DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE); //使能DMA1_Channel4作为中断通道,传输完成后中断屏蔽,使能
  40. }

五、设置中断

  1. /****************************************************************************
  2. * Function Name : NVIC_Configuration
  3. * Description : Configures Vector Table base location.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. void NVIC_Configuration(void)
  9. {
  10. NVIC_InitTypeDef NVIC_InitStructure;
  11.  
  12. #ifdef VET_TAB_RAM
  13. /* Set the Vector Table base location at 0x2000 0000 */
  14. NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  15. #else
  16. /* Set the Vector Table base location at 0x8000 0000 */
  17. NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  18. #endif
  19.  
  20. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置为组1
  21.  
  22. NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; //设置DMA1_Channel4为中断源
  23. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ; //优先级1
  24. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ; //子优先级1
  25. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
  26. NVIC_Init(&NVIC_InitStructure); //初始化
  27. }

在stm32f10x_it.c中加入:

 
  1. void DMA1_Channel4_IRQHandler(void)
  2. {
  3. if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET) //如果中断源是设置了
  4. {
  5. DMA_ClearFlag(DMA1_FLAG_TC4); //清除中断
  6. }
  7. }

六、main函数

 
  1. /****************************************************************************
  2. * Function Name : main
  3. * Description : Main program.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. int main(void)
  9. {
  10. RCC_Configuration();
  11.  
  12. NVIC_Configuration();
  13.  
  14. GPIO_Configuration();
  15.  
  16. USART_Configuration();
  17.  
  18. DMA_Configuration();
  19.  
  20. while()
  21. {
  22. GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)( - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
  23. fPutString("Hello World!", );
  24. Delay(0xffffff);
  25. }
  26. }
  27.  
  28. /****************************************************************************
  29. * Function Name : fPutString
  30. * Description : Send a string.
  31. * Input : None
  32. * Output : None
  33. * Return : None
  34. ****************************************************************************/
  35. void fPutString(u8 *buf, u8 len)
  36. {
  37. u8 i;
  38. for(i=;i<len;i++)
  39. {
  40. fPutChar(*buf++);
  41. }
  42. }
  43.  
  44. /****************************************************************************
  45. * Function Name : fPutChar
  46. * Description : Send a byte
  47. * Input : None
  48. * Output : None
  49. * Return : None
  50. ****************************************************************************/
  51. u8 fPutChar(u8 ch)
  52. {
  53. USART_SendData(USART1, (u8) ch);
  54. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
  55. {
  56.  
  57. }
  58. return ch;
  59. }
  • /*******************************************************************************
  • * 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实验总结的更多相关文章

  1. 【GMT43智能液晶模块】例程十:DMA实验——存储器到存储器的传输

    实验原理: DMA(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DMA2控制器的数据流0,选用通道0进行数据传输.通过液晶控制传输 和结果显示. 示例截图 ...

  2. 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输

    实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...

  3. 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输

    实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...

  4. 嵌入式单片机stm32之DMA实验

    一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道 每个通道都可以配置一些外设的地址. 二. 通道的配置过程: 1. 首先设置CPARx寄存器和CMARx寄存器 ...

  5. 【iCore3 双核心板】例程十一:DMA实验——存储器到存储器的传输

    实验指导书及代码包下载: http://pan.baidu.com/s/1bcY5JK iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...

  6. niosii dma实验中的一点感想

    1,使用nios给出的驱动函数的顺序一般为1,清中断2,写控制寄存器,3,写参数寄存器4,中断注册,5,开始工作.因为开始工作控制位在控制寄存器中,所以会想到到最后一块写,省事,但是在dma试验中发现 ...

  7. 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5

    [iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...

  8. 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24

    [iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...

  9. 【资料下载区】【iCore1S相关代码、资料下载地址】更新日期2017/10/09

    [iCore1S相关文档][更新中...] iCore1S原理图(PDF)下载iCore1S引脚注释(PDF)下载 [iCore1S相关例程代码][ARM][更新中...] DEMO1.0测试程序发布 ...

随机推荐

  1. spring-boot 定时任务案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.Maven Plugin管理 pom.xml配置代码: <?xml versio ...

  2. LDD3 第9章 与硬件通信

    一.I/O端口和I/O内存 每种外设都通过读写寄存器进行控制.大部分外设都有几个寄存器,不管是在内村地址空间还是在I/O地址空间,这些寄存器的访问地址都是连续的. 在硬件层,内存区域和I/O区域没有区 ...

  3. LOJ 2980 「THUSCH 2017」大魔法师——线段树

    题目:https://loj.ac/problem/2980 线段树维护矩阵. 然后是 30 分.似乎是被卡常了?…… #include<cstdio> #include<cstri ...

  4. [NOIP模拟20]题解

    来自达哥的问候…… A.周 究级难题,完全不可做QAQ #include<cstdio> #include<iostream> #include<cstring> ...

  5. codeforces gym 100345I Segment Transformations [想法题]

    题意简述 给定一个由A C G T四个字母组成的密码锁(每拨动一次 A变C C变G G变T T变A) 密码锁有n位 规定每次操作可以选取连续的一段拨动1~3次 问最少几次操作可以将初始状态变到末状态 ...

  6. QString的arg方法

    第一个参数是要填充的数字,第二个参数为最小宽度,第三个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符,如 QString name=QString("R%1C%2&quo ...

  7. html常用代码

    <marquee width="70%" scrollamount="2">大家好</marquee>    // 大家好 字符从左到右 ...

  8. 九. jenkins用户权限管理

    由于jenkins默认的权限管理体系不支持用户组和角色的配置,所以需要使用第三方插件来支持角色的配置: Role-based Authorization Strategy 1.先安装插件,如下: 2. ...

  9. 项目搭建(一):windows UIAutomation API 框架

    [环境] 操作系统:Windows7 集成环境:Visual Studio2015 编程语言:C# 目标框架:.net framework4.6 1.新建项目 Visual Studio 2015 [ ...

  10. play framework 在idea简单运行配置(mac为例)

    文章目录 play 最基本的构建 在idea中配置 配置jdk相关 配置play 运行 运行 play 最基本的构建 https://blog.csdn.net/dataiyangu/article/ ...