微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > +第四篇 ?USART程序及CMSIS-DAP Mini仿真器下载测试

+第四篇 ?USART程序及CMSIS-DAP Mini仿真器下载测试

时间:10-02 整理:3721RD 点击:

好久没有发帖了,刚考试完,发帖继续进行。

由于我之前用51做的一个东西主要用了串口和液晶屏幕。

所以要移植到STM32上,串口是很重要的一部分,然后,我就从昨天开始看手册,一步一步的进行串口程序的编写,记录下我的一些经验:

首先对引脚进行配置:


看看原理图:


  1. RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE );//±?D?òa?è1ò??ê±?ó£?è?oó3?ê??ˉGPIO?ú
  2.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  3.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  4.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  5.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  6.        
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  10.         GPIO_Init(GPIOA,&GPIO_InitStructure);       
  11. 接下来就是配置串口了,借助库函数,很方便的。
  12. USART1_InitStructure.USART_BaudRate = 9600;
  13.         USART1_InitStructure.USART_WordLength = USART_WordLength_8b ;
  14.         USART1_InitStructure.USART_StopBits = USART_StopBits_1;
  15.         USART1_InitStructure.USART_Parity = USART_Parity_No;
  16.         USART1_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
  17.         USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  18.         RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE );
  19.         USART_Init(USART1,&USART1_InitStructure);       
  20.         //USART_ITConfig (USART1,USART_IT_TXE,ENABLE); 发送的中断我一直没有使用明白,就是说自己现在还是不会用。
  21.         USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);       
  22.         USART_Cmd(USART1, ENABLE);

复制代码

还有中断部分:

初始化中断:

  1. NVIC_InitTypeDef NVIC_InitStructure;
  2.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  3.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;
  4.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
  5.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  6.         NVIC_PriorityGroupConfig  ( NVIC_PriorityGroup_3);
  7.         NVIC_Init (&NVIC_InitStructure);

复制代码

中断程序入口函数:

  1. void USART1_IRQHandler(void)
  2. {
  3.         if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)  //只是判断是否出现接收中断、发送中断不会用
  4.         {
  5.                 USART_ClearITPendingBit  (USART1,USART_FLAG_RXNE);
  6.                 rdata = USART_ReceiveData (USART1);
  7.                 rdata_flag=1;
  8.         }
  9. }

复制代码

特别说一下,我遇到的发送中断的问题是,进入发送中断就出不来了?,,,,呜呜呜,不知道怎么回事?哪位高手知道的话,给我点指点啊


主要的测试函数,串口显示字符串:

  1. void USART_Write(uint8_t* Data)
  2. {
  3.         uint8_t i=0;
  4.         while(*(Data+i)!='\0')
  5.         {
  6.                 while (!(USART1->SR & USART_FLAG_TXE));//?êDí·¢?í
  7.                 USART_SendByte(*(Data+i));
  8.                 i++;
  9.         }
  10. }
  11. USART_Write (wel);//"welcome china"

复制代码

效果截图:


发送数据部分的测试结果,直接返回接受到的字符


返回接受到的字符串:


设置了64字节的缓冲区。


24byte是可以的。


至此,串口程序算是短暂的告以段落了,下次就要准备液晶屏幕和移植其他代码了。


仿真器价格怎样。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top