野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11921|回复: 3

STM32F030F4 当UART发字符串时,LED灯就不闪了,当UART发HEX数组时LED能正常闪烁

[复制链接]
发表于 2017-1-26 21:45:19 | 显示全部楼层 |阅读模式
本帖最后由 baiyni888 于 2017-1-26 21:53 编辑

#include "stm32f0xx.h"

void GPIO_CSH()
{
        GPIO_InitTypeDef GPIO_InitStruct;
        USART_InitTypeDef USART_InitStruct;
        
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
        

        GPIO_Init(GPIOA, &GPIO_InitStruct);
        GPIO_PinLockConfig(GPIOA,GPIO_Pin_4);        
        
        
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
        

        GPIO_Init(GPIOA, &GPIO_InitStruct);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);        
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
        
        USART_InitStruct.USART_BaudRate=9600;
        USART_InitStruct.USART_WordLength=USART_WordLength_8b;
        USART_InitStruct.USART_StopBits=USART_StopBits_1;
        USART_InitStruct.USART_Parity=USART_Parity_No;
        USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        
        USART_Init(USART1,&USART_InitStruct);
        USART_Cmd(USART1, ENABLE);
        
}

void delay()
{
        unsigned int k;
        for(k=0;k<0xfffff;k++);
}

unsigned char tab[]={"江苏省南京市"};
void UART_FS(unsigned char *p)
{

        while(*p !='\0')
        {
                USART_SendData(USART1, *p);
                while( USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
                p++;
        }
}

unsigned char test[200];
void UART_Send()
{
        unsigned char k;
        for(k=0;k<200;k++)
        {
                test[k]=k;
                USART_SendData(USART1, test[k]);
                while( USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);        
        }
}
int main()
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
        
        GPIO_CSH();
        while(1)
        {
                GPIO_SetBits(GPIOA, GPIO_Pin_4);
               
                USART_SendData(USART1, 0xaa);        //发单个字节
                while( USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
               
                delay();
                GPIO_ResetBits(GPIOA, GPIO_Pin_4);
               
                UART_Send();                //发字HEX数组
        //        UART_FS(tab);                //发字符串
                delay();
        }
}

KEIL 5.17 环境,当代码中注释掉的发送字符串功能不用时,UART也能正常发HEX字节和HEX数组,同时在PA4端口的LED灯能正常闪烁,当去掉代码中注释后,UART也能发HEX数组和字符串,就是LED灯不闪了,不知道是什么原因?


QQ截图201701262149020000.png
回复

使用道具 举报

 楼主| 发表于 2017-1-26 21:49:49 | 显示全部楼层
使用的是 STM32F030 的 V1.0 库,使用的是最小系统板
回复 支持 反对

使用道具 举报

发表于 2017-1-27 00:43:57 | 显示全部楼层
             GPIO_SetBits(GPIOA, GPIO_Pin_4);
               
                USART_SendData(USART1, 0xaa);        //发单个字节
                while( USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
               

              UART_Send();                //发字HEX数组
        //        UART_FS(tab);                //发字符串
                delay();
                delay();
                GPIO_ResetBits(GPIOA, GPIO_Pin_4);
               
  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-27 16:57:33 | 显示全部楼层
已经解决了,不过不知道为什么?

       //        UART_FS(tab);                //发字符串
改成下面的就好了,UART发字符串的同时LED也能正常闪烁了
       //        UART_FS("江苏省南京市");                //发字符串
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 04:35 , Processed in 0.038044 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表