STM32串口usart发送数据

发布时间:2024-08-14  

主函数请直接关注41行到47行代码!!


 1 #include 'stm32f10x.h'   // 相当于51单片机中的  #include

 2 #include 'stm32f10x_gpio.h'

 3 #include 'stm32f10x_usart.h'

 4 #include 'led.h'

 5 #include 'key.h'

 6 #include 'key interrupt.h'

 7 #include 'delay.h'

 8 #include 'usart1.h'

 9 #include 'stdio.h'

10 #include 'usart.h'

11 

12 int main()

13 {

14     /*

15     *                            一、点亮一个LED

16     */

17     

18                                 /*点亮一个LED灯*/

19 //red_on();//红灯

20 //green_on();//绿灯

21 //blue_on();//蓝灯

22                                 

23 /*

24 *                                二、按键通过按键实现控制led的亮灭(有两种情况)

25 */    

26 

27 //key1();

28 //key2();

29 //key3();    

30     

31 /*

32 *                                三、按键K1,K2中断控制LED亮灭

33 */

34 

35 //interrupt();//详细代码见key interrupt.c文件    

36 

37 /*

38 *                           四、串口

39 */

40 

41   usart1_config();                            //串口初始化

42     USART_SendData(USART1,'A');        //发送数据A

43     printf('kinsonn');                        //用printf打印数据kinson,说明:printf默认打印输出在控制台,现在修改源码打印输出至串口

44     while(1);

45     

46 

47 /*

48 *                                五、    Systick时钟定时

49 */                                

50 

51 /*

52      SystemInit();//初始化系统,使得系统频率为72兆

53      

54      //配置Systick为10us中断一次,时间到后触发定时中断

55      //进入stm32fxx_it.c文件的SysTick_Handle处理,通过数中断次数计时

56    

57    led_gpio_init();//LED端口初始化

58    while(1)

59    {

60    

61    GPIO_Setbits(GPIO,GPIO_Pin_15);

62    delay_ms(1000);//延时

63    GPIO_ResetBits(GPIO,GPIO_Pin_15);

64    delay_ms(1000);//延时

65         while(1);

66      }

67      */

68 }


新建一个文件配置串口usart相关的配置


 1 #include 'usart1.h'

 2 #include 'stm32f10x.h'//相当于stdio头文件

 3 #include 'stm32f10x_gpio.h'//配置GPIO要用的头文件

 4 #include 'stm32f10x_usart.h'//配置串口usart要用的头文件

 5 #include 'misc.h'                        //配置中断NVIC要用的头文件

 6 #include 'stdio.h'                    //为printf所用

 7 

 8 /*串口1的配置函数*/

 9 void usart1_config()

10 {

11     //第一步:时钟配置(GPIO时钟,串口时钟)

12     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);

13     //第二步,GPIO配置,Rx(接受)为PA10,Tx(发送)为PA9

14     GPIO_InitTypeDef a;                        //定义结构体

15     /*配置PA9为复用推挽输出*/

16     a.GPIO_Pin=GPIO_Pin_9;                //端口9,依据来源看电路图

17     a.GPIO_Speed=GPIO_Speed_50MHz;

18     a.GPIO_Mode=GPIO_Mode_AF_PP;        //复用推挽输出

19     GPIO_Init(GPIOA,&a);                        //初始化

20     

21     /*配置PA10为浮空输入*/

22     a.GPIO_Pin=GPIO_Pin_10;

23     a.GPIO_Mode=GPIO_Mode_IN_FLOATING;    //浮空输入

24     a.GPIO_Speed=GPIO_Speed_50MHz;

25     GPIO_Init(GPIOA,&a);

26     

27     //第二步:NVIC配置

28         /*NVIC嵌套向量中断控制器*/

29     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    //优先级配置

30     NVIC_InitTypeDef b;

31     b.NVIC_IRQChannel = USART1_IRQn;//USART1_IRQn串口中断

32     b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 

33     b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 

34     b.NVIC_IRQChannelCmd = ENABLE;        //使能

35     NVIC_Init(&b);

36     

37     //第三步:串口配置

38     USART_InitTypeDef c;

39     c.USART_BaudRate=9600;        //波特率

40     c.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件控制流

41     c.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;        //模式,此模式为发送和接受

42     c.USART_WordLength=USART_WordLength_8b;//字长8

43     c.USART_Parity=USART_Parity_No;                 //奇偶校验n

44     c.USART_StopBits=USART_StopBits_1;            //停止位1

45     USART_Init(USART1,&c);

46     //第四步:串口时能

47     USART_Cmd(USART1,ENABLE);    

48 }    

49     

50     

51     

52     

53     /*以下代码为printf能在发送数据给串口所用*/

54 int fputc(int ch,FILE* ffdsfa)

55 {

56     USART_SendData(USART1,ch);

57     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);//等待发送完成

58     return  ch;

59 }    

60 

61     

62     

63     

64     

65     

66     


新建.h文件(不同文件之间的函数调用必须掌握的知识点)


1 #ifndef _USART1_H_

2 #define _USART1_H_

4 void usart1_config();

7 #endif


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    stm32怎么读取串口发来的指令;读取串口发来的指令是嵌入式系统中一项常见的任务,特别是在与外部设备进行通信时。在STM32系列微控制器中,提供了多个串口接口(USART、UART等),可以用于读取和处理串口接收到的数据......
    中断也使用了这些机制,理解了这些机制就能更加明白串口驱动一些问题, 现在先提出几个问题如下: 前面提供到中断接收后数据,先放到flip缓冲区当中,这样让人很容易进一步想知道,中断处理的缓冲区的数据,用户进程读取串口时如何读......
    模式 REG_B = REG_B|0x02; // 寄存器B的24/12位置1,24小时时间模式 while (1) { setflag = getdata(); // 通过查询方式获取串口数据......
    (Receive_Data_Pr)); read函数读取串口接收到的字节,之后通过定义的通信协议再进行和校验与数据解析即可stm32向ROS主控发送数据。 ROS主控向stm32发送数据 ROS主控向stm32......
    集成开发环境,有助于提高开发的效率。QT应用程序的开发是在宿主机上调试通过后,移植到目标板上。 3.2 串口通信界面串口通信界面提供串口属性设置、串口数据通信的接口函数以及DSP反馈给ARM9的电......
    数操作 USART_DR 寄存器读取串口接收到的数据的函数是: uint16_t USART_ReceiveData(USART_TypeDef* USARTx); 通过该函数可以读取串口接受到的数据......
    NO.13 利用Matlab对MSP432采集到的数据进行处理;  我们已经讲过MSP432开发板串口的应用。对于我们来说,我们很需要通过一些数据采集模块将采集到的数据发送到电脑......
    的标志就会储存在状态寄存器SR中。 假如将串口的接收与发送都设置为中断,那么如何才能确定是由什么时间触发的中断呢?这就可以从状态寄存器中读取标志位了。 标志位检查的库函数 GETFLAGSTATUS......
    用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。 如何使用串口通讯,你需要知道的几个重要的知识点: 波特率,数据传输的速度,如上......
    信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。..。..这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>