①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
③GPIO端口模式设置:GPIO_Init();
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
#if EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0, 接收到的有效字节数目
u16 USART_RX_STA=0; //接收状态标记
void uart_init(u32 bound){
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//USART 初始化设置
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(USART1, &USART_InitStructure); //初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART1, ENABLE); //使能串口1
}
上一篇:STM32应用简章之GPIO初始化(输入引脚)
下一篇:STM32应用简章之外部中断
推荐阅读
史海拾趣
在快速发展的同时,港源公司始终不忘履行社会责任。公司秉承绿色环保、节能减排的理念,在生产经营活动中以预防为主、全员参与为行动纲领,防治污染、节废减排。港源公司选用绿色环保RoHS材料,严格管控生产制造过程,确保生产出的产品符合国际环保标准。此外,公司还积极参与社会公益活动,为社会和谐发展贡献自己的力量。
面对日益激烈的市场竞争,Akros公司积极寻求市场拓展的机会。公司开始参加国际电子展会,与全球各地的客户建立联系。通过展示其独特的技术优势和高质量的产品,Akros逐渐赢得了国际市场的认可。同时,公司还加强了与全球供应链的合作,实现了原材料的全球化采购,降低了生产成本,提高了产品的竞争力。
Diamond SA公司深知创新是企业持续发展的动力源泉。因此,他们不断加大对研发的投入力度,积极引进和培养高端人才,建立了完善的研发体系。公司不断推出具有创新性和领先性的电子产品和技术解决方案,赢得了客户的广泛赞誉和认可。同时,他们还积极参与国际技术交流和合作,与全球顶尖的科研机构和企业建立了紧密的合作关系。
进入21世纪,随着LED技术的快速发展,ERG看到了固态照明市场的巨大潜力。2008年,公司决定成立一个新的部门——ERG Lighting,专注于为固态照明市场设计、制造和分销LED驱动器和其他照明配件。这一举措极大地拓展了公司的业务范围,并使其在市场上占据了有利地位。ERG Lighting的成立,不仅为公司带来了新的增长点,还进一步巩固了其在电源转换产品领域的领先地位。
Display Elektronik GmbH公司自创立之初,就致力于显示技术的研发与创新。在21世纪初,公司推出了一款采用全新显示技术的液晶显示屏,其高分辨率、低功耗和长寿命的特点迅速赢得了市场的认可。随着技术的不断迭代,Display Elektronik GmbH逐步确立了在显示技术领域的领先地位。
面对数字化浪潮的冲击,EHC公司积极拥抱数字化转型。公司引入先进的生产管理系统和自动化设备,提高了生产效率和产品质量。同时,EHC公司还利用大数据和云计算等技术手段优化供应链管理、客户服务等业务流程,提高了企业的运营效率和客户满意度。这种数字化转型的举措让EHC公司在激烈的市场竞争中保持了竞争优势。
以上五个故事分别从不同角度描述了EHC公司在电子行业中的发展历程和成功经验。这些故事都是基于一般性的电子行业发展趋势和企业实践经验构建的虚构案例仅供参考和学习之用。
我国第2架ARJ21飞机完成首次城际长途飞行我国第2架ARJ21飞机完成首次城际长途飞行 中国自主研制的第二架ARJ21-700新支线飞机14日完成首次城际长途飞行,从上海转场飞往西安阎良。这架飞机将同首架ARJ21一起,为取得中国民航总局和美国联邦航空局适航证所开展的最后阶段的试飞试验。 此次飞行历时2小时17分钟。13时21分,飞机 ...… 查看全部问答∨ |
|
eboot中把nk.bin烧到nand上,并把剩余nand创建fat32分区的步骤: 1.先把stepldr和eboot的空间用FMD_WriteSector设置为只读 2.擦除剩余nand空间 3.用BP_LowLevelFormat格式化nk.bin空间 4.下载nk.bin ... 是这样的吗??我发现不用第三步的话 ...… 查看全部问答∨ |
|
CE下的界面平移,旋转,上下/左右合并,上下/左右分离效果该怎么做?用D3DM?用D3DM的多个Surface/Texture来实现?特效都是针对他们来操作? CE下的界面平移,旋转,上下/左右合并,上下/左右分离效果该怎么做?用D3DM?用D3DM的多个Surface/Texture来实现?特效都是针对他们来操作?… 查看全部问答∨ |
|
新手跪求:evc编译成功,可运行时报.exe文件找不到 ,这是怎么回事,高手请教。 我是个新手,安装了evc4.0, sp4 以及自己的SDK. 我的操作时新建WCE Application,在菜单中insert个对话框,就这样,编译运行,可是总是报生成的exe文件不存在。高手请教,谢谢… 查看全部问答∨ |
1、普通大学计算机本科毕业,在校期间成绩优异 2、在某正规民企从事 VOIP 研发( ARM Linux 驱动和应用开发)半年,精通C/C++、Linux、数据库,熟悉内核裁剪和移植,月薪2k多(税前) 3、英语6级,日语4级(初级) 一个月后跟现在的公司半年合同 ...… 查看全部问答∨ |
EDB数据库更新发现个很奇怪的问题,更改个变量的值就不能显示了,见以下代码说明: void ShuJuKu::OnBnClickedBtnrefresh(){//定义学生记录对象REC_STUDENT *pRecStudent=NULL;DWORD iRecCount=0;//获取数值指针CListCtrl * pListCtrl=(CListCtrl* ...… 查看全部问答∨ |