+第四篇 ?USART程序及CMSIS-DAP Mini仿真器下载测试
时间:10-02
整理:3721RD
点击:
好久没有发帖了,刚考试完,发帖继续进行。
由于我之前用51做的一个东西主要用了串口和液晶屏幕。
所以要移植到STM32上,串口是很重要的一部分,然后,我就从昨天开始看手册,一步一步的进行串口程序的编写,记录下我的一些经验:
首先对引脚进行配置:
看看原理图:
- RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE );//±?D?òa?è1ò??ê±?ó£?è?oó3?ê??ˉGPIO?ú
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- 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_10MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- 接下来就是配置串口了,借助库函数,很方便的。
- USART1_InitStructure.USART_BaudRate = 9600;
- USART1_InitStructure.USART_WordLength = USART_WordLength_8b ;
- USART1_InitStructure.USART_StopBits = USART_StopBits_1;
- USART1_InitStructure.USART_Parity = USART_Parity_No;
- USART1_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
- USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE );
- USART_Init(USART1,&USART1_InitStructure);
- //USART_ITConfig (USART1,USART_IT_TXE,ENABLE); 发送的中断我一直没有使用明白,就是说自己现在还是不会用。
- USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);
- USART_Cmd(USART1, ENABLE);
还有中断部分:
初始化中断:
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_PriorityGroupConfig ( NVIC_PriorityGroup_3);
- NVIC_Init (&NVIC_InitStructure);
中断程序入口函数:
- void USART1_IRQHandler(void)
- {
- if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) //只是判断是否出现接收中断、发送中断不会用
- {
- USART_ClearITPendingBit (USART1,USART_FLAG_RXNE);
- rdata = USART_ReceiveData (USART1);
- rdata_flag=1;
- }
- }
特别说一下,我遇到的发送中断的问题是,进入发送中断就出不来了?,,,,呜呜呜,不知道怎么回事?哪位高手知道的话,给我点指点啊。
主要的测试函数,串口显示字符串:
- void USART_Write(uint8_t* Data)
- {
- uint8_t i=0;
- while(*(Data+i)!='\0')
- {
- while (!(USART1->SR & USART_FLAG_TXE));//?êDí·¢?í
- USART_SendByte(*(Data+i));
- i++;
- }
- }
- USART_Write (wel);//"welcome china"
效果截图:
发送数据部分的测试结果,直接返回接受到的字符:
返回接受到的字符串:
我设置了64字节的缓冲区。
24byte是可以的。
至此,串口程序算是短暂的告以段落了,下次就要准备液晶屏幕和移植其他代码了。
仿真器价格怎样。