IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2.合宙Air32F103_USART -> 正文阅读

[嵌入式]2.合宙Air32F103_USART

一、简介

本章目的:在上一章的基础上,添加串口的功能。可以实现串口的发送,中断接收,以及printf的重定向。

二、从例程移植

找到串口的例程:ModuleDemo\USART\USART_Asyn\USER\USART.uvprojx

关于串口中断的配置,在485的例程工程中有相关内容:

ModuleDemo\USART\USART_Rs485\USER\USART.uvprojx

三、移植

具体的移植过程,不再介绍了,将初始化和中断配置的部分复制过来就可以了。

3.1usart.c

在usart.c中包括初始化,发送单字节函数,printf重定向函数。以及接收中断服务子函数,将收到的数据直接发回。

#include "usart.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int fputc(int c, FILE *f)

{

?????? /* Place your implementation of fputc here */

?????? /* e.g. write a character to the USART */

?????? usart1_1_byte(c);

?????? return c;

}

void uart1_init(uint32_t bound)

{

?????? GPIO_InitTypeDef GPIO_InitStructure;

?????? USART_InitTypeDef USART_InitStructure;

?????? NVIC_InitTypeDef NVIC_InitStructe;

??????

?????? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

?????? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

?????? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

?????? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

?????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

?????? GPIO_Init(GPIOA, &GPIO_InitStructure);

?????? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

?????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

?????? GPIO_Init(GPIOA, &GPIO_InitStructure);

?????? USART_InitStructure.USART_BaudRate = bound;

?????? USART_InitStructure.USART_WordLength = USART_WordLength_8b;

?????? USART_InitStructure.USART_StopBits = USART_StopBits_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;

?????? NVIC_InitStructe.NVIC_IRQChannel = USART1_IRQn;

?????? NVIC_InitStructe.NVIC_IRQChannelCmd = ENABLE;

?????? NVIC_InitStructe.NVIC_IRQChannelPreemptionPriority = 1;

?????? NVIC_InitStructe.NVIC_IRQChannelSubPriority = 0;

?????? NVIC_Init(&NVIC_InitStructe);

??????

?????? USART_Init(USART1, &USART_InitStructure);

?????? USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

?????? USART_Cmd(USART1, ENABLE);

}

void usart1_1_byte(int ch)

{

?????? while (!USART_GetFlagStatus(USART1, USART_FLAG_TC));

?????? USART_SendData(USART1, (uint8_t)ch);

?????? while (!USART_GetFlagStatus(USART1, USART_FLAG_TC));

}

void USART1_IRQHandler(void)??????????????? ???? //串口1中断服务程序

{

?????? u8 st,sbuf;

?????? st=USART_GetITStatus(USART1, USART_IT_RXNE);

?????? if(st==SET)? //

?????? {

????????????? sbuf=USART1->DR;

????????????? usart1_1_byte(sbuf);

?????? }

}

3.2usart.h

#ifndef __USART_H__

#define __USART_H__????????? ??

#include ???? "air32f10x.h"

void uart1_init(uint32_t bound);

void usart1_1_byte(int ch);

#endif

3.3main.c

main.c中包括初始化等操作。将官方例程中的CLK打印封装到CLK_Printf中。

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

#include "delay.h"

#include "led.h"

#include "usart.h"

void CLK_Printf(void);

int main(void)

{

?????? delay_init();?????????????????????? //延时初始化

?????? uart1_init(115200);

?????? CLK_Printf();

??????

?????? LED_GPIO_Init();

??????

?????? printf("wuzjjj\r\n");

?????? while (1)

?????? {

????????????? LEDR_TOGGLE;

????????????? delay_ms(200);//延时200ms

?????????????

????????????? LEDG_TOGGLE;

????????????? delay_ms(200);//延时200ms

?????????????

????????????? LEDB_TOGGLE;

????????????? delay_ms(200);//延时200ms

?????? }

}

void CLK_Printf(void)

{

?????? RCC_ClocksTypeDef clocks;

?????? RCC_GetClocksFreq(&clocks); //获取系统时钟频率

?????? printf("SYSCLK:%.1fMhz,HCLK:%.1fMhz,PCLK1:%.1fMhz,PCLK2:%.1fMhz,ADCCLK:%.1fMhz\r\n",

????????????? (float)clocks.SYSCLK_Frequency/1000000,(float)clocks.HCLK_Frequency/1000000,

?????? ?????? (float)clocks.PCLK1_Frequency/1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000);

}

四、调试

4.1下载程序

按照上一章的接线图,将A9 A10接到DAP-Link虚拟串口的A2 A3上。

4.2调试结果

复位后,打印当前的时钟频率。

串口发送后将自动回复数据。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:03:54  更:2022-07-20 19:04:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:26:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码