正点原子的开发板,一定要注意跳线帽
串口2
usart2.h
//STM32F407 zgt6 串口2
#ifndef __USART2_H
#define __USART2_H
#include "sys.h"
#define USART2_MAX_RECV_LEN 200
#define USART2_MAX_SEND_LEN 200
extern u8 USART2_RX_buf[USART2_MAX_RECV_LEN];
extern u8 USART2_TX_buf[USART2_MAX_SEND_LEN];
extern u16 USART2_RX_STA; //接收状态标记
void uart2_init(u32 bound);
#endif
usart2.c
#include "usart2.h"
u8 USART2_RX_buf[USART2_MAX_RECV_LEN];
u8 USART2_TX_buf[USART2_MAX_SEND_LEN];
u16 USART2_RX_STA=0;//接收状态标记
/* 初始化串口过程
1.串口时钟使能
2.设置引脚复用
3.GPIO端口初始化
4.串口参数初始化
5.初始化NVIC并且开启中断2
6.使能串口
*/
//初始化IO 串口2
//bound:波特率
void uart2_init(u32 bound)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
//串口1对应引脚复用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2
//USART2端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2与GPIOA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA2,PA3
//USART2 初始化设置
USART_InitStructure.USART_BaudRate = bound;//波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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; //收发模式
USART_Init(USART2, &USART_InitStructure); //初始化串口2
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3 数值越小优先级越高
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3,响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启接收中断
USART_Cmd(USART2, ENABLE); //使能串口2
}
void USART2_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2);//(USART2->DR); //读取接收到的数据
USART_SendData(USART2,Res);//将收到的发回去了
}
}
main.c
#include "sys.h"
#include "delay.h"
//#include "usart1.h"
#include "usart2.h"
#include "led.h"
int main(void)
{
u8 t=0,len=0;
u16 times=0;
char str[]={'u','1','w','a','i','t','r','n'};
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);//168 MHz
LED_Init();
LED1=0;//位带操作点灯 sys.h
uart2_init(115200);
while(1)
{
if (USART2_RX_STA&0x8000)//接收完成
{
len=USART2_RX_STA&0x3fff;//长度不能超255,因为len是u8
for(t=0;t USART2->DR=USART2_RX_buf[t]; while((USART2->SR & 0x40)==0);//等待发送结束 USART2_RX_STA=0; } } else { times++; if(times %500==0)//5sec { for(t=0;t USART2->DR=str[t]; while((USART2->SR & 0x40)==0);//等待发送结束 } LED1=!LED1; } delay_ms(10); } } } 以上必须在模板工程的配置情况下才能运行,本人验证以上代码ok
上一篇:STM32 KEIL MDK 本地时间和Unix timestamp相互转换
下一篇:stm32F103 DMA通道
推荐阅读
史海拾趣
面对不断变化的市场环境和技术挑战,CEVA公司积极应对,抓住机遇。例如,在执行编码标准并降低许可证风险方面,CEVA的DevOps/实时开发团队面临着在更高效地执行编码标准的同时降低许可证相关风险的挑战。公司通过优化开发流程、提升自动化水平等方式,成功应对了这一挑战。同时,CEVA也通过增加站点布局、拓建电商能力、提升产品竞争力等手段,抓住市场机遇,迎接未来。
在国内市场取得成功后,AW Industries Inc开始寻求国际化发展。公司首先选择了几个具有潜力的海外市场进行拓展,并通过与当地企业合作、建立销售网络等方式逐步打开市场。随着国际化战略的深入实施,公司的业务范围不断扩大,国际市场份额也逐步增加。
面对日益复杂的市场环境和客户需求,Advance Tapes公司积极寻求与其他企业的合作机会。通过与上游原材料供应商建立长期稳定的合作关系,确保了原材料的稳定供应和质量保障;通过与下游电子制造企业的深度合作,共同开发定制化胶带产品,满足了客户的特殊需求。这些合作不仅提升了Advance Tapes的市场竞争力,也促进了整个电子产业链的健康发展。
1 引言 单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉,因此在过程控制、数据采集、机电一体化、智能化仪表、家用电器以及网络技术等方面得到广泛应用,本文主要介绍单片机在炉温控制中的应用。 在工业生产中,有很多行业有大量的 ...… 查看全部问答∨ |
|
兄弟伙们,能不能推荐一本好书,讲解DSP芯片(TMS320c2812)的啊????万分感谢! 兄弟伙们,能不能推荐一本好书,讲解DSP芯片(TMS320c2812)的啊????万分感谢!… 查看全部问答∨ |
|
AMD有可能在本月末宣布其奉行“轻晶圆厂”策略的大动作,包括转手其Dresden晶圆厂,接受来自一家中东财团的投资组建一家新公司。 在Austin美国发言人John Lau和Jefferies共同发表一份投资分析报道中指出,其智囊团认为AMD正寻找买主,打算抛售其在D ...… 查看全部问答∨ |
|
别看程序长,只问两个小点, (1)下面的红色显示处,字母\'b\'可以去掉吗??? (2)下面的蓝色显示处,字母\'x\'是什么意思呢???可以去掉吗??? LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY alu IS ...… 查看全部问答∨ |
请问Nand flash在手机上是存储什么的?相当于外存还是内存,它和RAM有什么区别和联系呢?和SD卡的联系呢? 手机中的程序比如QQ是在那个存储器里运行的呢?Nand flash 和PC机的硬盘是不是一个概念? 谢谢… 查看全部问答∨ |
将模拟信号转换为数字信号,再把数字信号通过串口在终端读出数据! 我是一个单片机菜鸟,还没有入门,用的是ATmega128单片机,用PF2(ADC2)输入模拟信号,要写一个程序把模拟信号转换为数字信号并通过串口在终端显示出来转换后的数字信号信息,那位大侠帮帮忙,多谢!… 查看全部问答∨ |
大虾们好!最近最一个产品,测试一个润滑脂的低液位报警,就是提醒要加料了! 装在直径200mm,高度75mm(这个很小)还有高度250mm的塑料桶里面。桶底有一个直流电机带动的刮板。 润滑脂粘度很大,类似于黄油,稍微稀一点,流动性很小。 用音叉肯 ...… 查看全部问答∨ |