Stm32串口发送字符串数据

发布者:seanxnie最新更新时间:2016-06-14 来源: eefocus关键字:Stm32  串口发送  字符串数据 手机看文章 扫描二维码
随时随地手机看文章
ps:把字符串分成字节循环发送

 

/*
*说明:
*PA0:KEY1;PA1:KEY2;
*PA2:LED1;PA3:LED2;
*PA9:USART1_TX;PA10:USART1_RX
*/
#include "stm32f10x.h"  
#include "stm32f10x_rcc.h"  
#include "stm32f10x_gpio.h"  
#include "stm32f10x_usart.h" 
#include "stm32f10x_crc.h"
#include "system_stm32f10x.h" 
#include "stdio.h" 

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

void RCC_Configuration(void);  
void GPIO_Configuration(void); 
void USART_Configuration(void); 
void delay_ms(u16 time);
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data);
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str);

int main()
{
    SystemInit();
    
    RCC_Configuration();  
    GPIO_Configuration();   
    USART_Configuration(); 
    while(1)
    {
      printf("\n发送的信息:");
      UART_PutStr(USART1, "hello world!"); 
      delay_ms(1000);  
    } 
    
}
void RCC_Configuration(void)    
{     
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);     
}   
  
void GPIO_Configuration(void)    
{    
  GPIO_InitTypeDef GPIO_InitStructure;    
    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             //管脚9  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       //复用推挽输出  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                //TX初始化  
    
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;            //管脚10  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉输入  
  GPIO_Init(GPIOA, &GPIO_InitStructure);                //RX初始化  
     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;//LED GPIO_Pin_All    
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
}
void USART_Configuration(void)//串口初始化函数  
{  
    //串口参数初始化    
    USART_InitTypeDef USART_InitStructure;               //串口设置恢复默认参数  
    //初始化参数设置  
    USART_InitStructure.USART_BaudRate = 9600;                  //波特率9600  
    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);                                  //启动串口  
}
void delay_ms(u16 time)     
{    
  u16 i=0;    
  while(time--)     
  {    
    i=12000;    
    while(i--);    
  }    
} 
int putchar(int c)                                            //putchar函数  
{  
    if (c == '\n'){putchar('\r');}                                 //将printf的\n变成\r  
    USART_SendData(USART1, c);                                   //发送字符  
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} //等待发送结束  
    return c;                                                      //返回值  
} 
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)
{
    USART_SendData(USARTx, Data);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}
}
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)  
{  
    while (0 != *str)  
    {  
        UART_PutChar(USARTx, *str);  
        str++;  
    }  
} 
关键字:Stm32  串口发送  字符串数据 引用地址:Stm32串口发送字符串数据

上一篇:stm32 串口发送数据第一字节丢失
下一篇:Stm32串口发送字节数据

推荐阅读最新更新时间:2024-03-16 14:57

浅谈STM32芯片的存储结构
一、前言 本篇介绍STM32芯片的存储结构,ARM公司负责提供设计内核,而其他外设则为芯片商设计并使用,ARM收取其专利费用而不参与其他经济活动,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。图1为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。可以明显看出总线是cpu、内存、外设传递信息的公用通道,芯片上的各个部件通过总线相连接。 图1 STM32芯片简要结构图 内核通过总线访问各个外设,现在通往外设的“路”已经铺好,还需要规定各个外设的“门牌号”,以便精准控制每个外设。ARM Cortex-M3系列的处理器,采用存储
[单片机]
浅谈<font color='red'>STM32</font>芯片的存储结构
RN8209+stm32+spi通信一直接收0xff
要养成及时总结的习惯!!!留下重要的经验! 留给下次的经验:做成品板之前建议先做一个demo板,越大越省时间,只要10*10之内的都是一个价嘛。但一定是要这个芯片或者功能的最全版本,接口都要留出来,便于调试! 这次的rn8209-demo板: 1在pcb布局完成后,可以多增加几个接口。 2spi/串口转换开关 3脉冲输出引脚​ 当然除非你对这个电路非常有把握,那没有必要去做这个demo板了。​ RT(如题),关于RN8209的资料很详细,但程序就那两个,调试出了问题,找了好久没有找到,一直怀疑是程序有问题,但又没有其他现成的程序可以参考,没办法只能一点一点地找问题。 最后在google搜索到的一个帖子上找到了一点其他​
[单片机]
STM32启动文件(Reset_Handler函数)
该文件主要实现目的: 设置初始SP 设置初始PC=Reset_Handler 设置向量表入口地址,并初始化向量表 调用SystemInit,把系统时钟配制成72M,SystemInit在库文件system_stm32f10.c定义 调转到 标号_main,最终来到C程序文件 ; Reset handler Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0
[单片机]
stm32入门——跑马灯(基于stm32f103zet6)
最近开始学stm32,着实感觉到了stm32和51之间的区别,但也有联系,总我感觉32与51之间最大的区别就是在使用某个外设之前,要对该外设进行时钟的使能(以达到降低功耗的目的),和相关配置。 刚学完跑马灯,下面对跑马灯用到的对IO口的配置相关知识分别对应官方库函数和寄存器进行总结。 如有错误或不足,请在下方留言。 文章内容基于正点原子战舰。 IO口的状态 IO口有八大模式:─ 输入浮空( GPIO_Mode_IN_FLOATING = 0x04,) ─ 输入上拉( GPIO_Mode_IPU = 0x48,) ─ 输入下拉( GPIO_Mode_IPD
[单片机]
<font color='red'>stm32</font>入门——跑马灯(基于stm32f103zet6)
STM32状态监测功能包可简化机器学习过程
意法半导体发布一款免费的STM32软件功能包,让用户可以用微控制器探索套件快速创建、训练、部署工业状态监测智能边缘设备。 FP-AI-NANOEDG1软件包由意法半导体与机器学习专业开发科技公司、ST授权合作伙伴Cartesiam共同开发,包含捕获传感器数据,集成和运行Cartesiam的NanoEdge库所需的全部驱动程序、中间件、文档和代码示例。即使用户没有专业的AI技能,也能在Windows®10或Ubuntu PC机上,用Cartesiam NanoEdge™AI Studio工具快速创建并导出自定义机器学习库。功能包可简化在STM32开发板上的原型开发和确认测试过程,而且是免费使用,当客户在硬件上部署软件包时,
[单片机]
<font color='red'>STM32</font>状态监测功能包可简化机器学习过程
STM32GPIO——快速IO的使用
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。 GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。 简单地说
[单片机]
第五节:STM32输入捕获(用CubeMX学习STM32)
前言: STM32定时器输入捕获简介 STM32的输入捕获可以用于捕获脉宽, 测量时间 . 例如超声波测距模块就是需要用输入捕获功能, 通过测量输入脉冲的高电平脉宽 , 从而计算出测量物体的距离 ; 定时器PWM工作模式上篇博客讲过了, 上篇是输出PWM, 本篇是要输入, 即外面的信号送给单片机的引脚, 然后单片机测量出脉宽 ; 注: 下面根据正点原子的标准库函数教程分析, 并用CubeMX完成配置以及HAL库函数编程 如图所示 : 以测量高电平脉宽为例, 我们先设置定时器通道为上升沿捕获, 到1的时候触发定时器计数, 然后立刻设置为下降沿捕获, 到2的时候就捕获到下降沿, 再记录输入捕获寄存器的值, 两个时间差就是高电平时长
[单片机]
第五节:<font color='red'>STM32</font>输入捕获(用CubeMX学习<font color='red'>STM32</font>)
STM32】DMA基本原理、寄存器、库函数(2)
05 DMA中断状态寄存器(DMA_ISR) 作用:可以获取DMA传输的状态标志。 注意:此寄存器为只读寄存器,所以在这些位被置位后只能通过其他的操作来清除。 06 DMA中断标志清除寄存器(DMA_IFCR) 作用:通过往寄存器内写1来清除DMA_ISR被置位的位。 DMA通道配置过程 下面是配置DMA通道x的过程(x代表通道号): 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标; 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址; 在DMA_CNDTRx寄存器中设置要传输的数据量
[单片机]
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved