历史上的今天
返回首页

历史上的今天

今天是:2024年09月17日(星期二)

2019年09月17日 | STM8L USART串口使用

2019-09-17 来源:eefocus

STM8L上有多个串口,最多可达5个,分别为USART1~USART5,但依据型号不同,搭载数量并不相同。 


以STM8L052R8为例,其只具有USART1~USART3。 


因为STM8系列功能众多,很多Pin都是复用的,因此使用前必须检查STML的参考手册。 

通过手册可知,以USART1为例,RX/TX可以使用以下的管脚,默认是PC2/PC3, 

如果要变更,需要修改SYSCFG remap control register 1 (SYSCFG_RMPCR1)的5:4位进行切换。


Bits 5:4 USART1TR_REMAP[1:0]: USART1_TX and USART1_RX remapping 

00: USART1_TX on PC3 and USART1_RX on PC2 

01: USART1_TX on PA2 and USART1_RX on PA3 

10: USART1_TX on PC5 and USART1_RX on PC6 

11: Reserved


初始化:


    // USART init

    USART_DeInit(USART1);  


    // PC2-RX PC3-TX 端口上拉

    GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2 | GPIO_Pin_3, ENABLE);


    // 初始化参数

    USART_Init(USART1, 

                (uint32_t)9600, 

                USART_WordLength_8b, 

                USART_StopBits_1, 

                USART_Parity_No, 

                USART_Mode_Rx | USART_Mode_Tx);  // 允许读和写


    // 开中断

    // 一般需要写时再开写中断,否则写中断会非常频繁以至于始终在执行中断

    // 读中断看具体业务

    //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);    

    //USART_ITConfig(USART1, USART_IT_TC, ENABLE);


    /* Enable USART 使能 */

    USART_Cmd(USART1, ENABLE);


关闭串口


    GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2 | GPIO_Pin_3, DISABLE);

    USART_Cmd(USART1, DISABLE );

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);

    USART_ITConfig(USART1, USART_IT_TC, DISABLE);


读写处理(异步)


void uart_begin_read(uint8_t len)

{

    // prepare send data

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);


    // 初始化读缓冲

    read_idx = 0;

    read_len = len;


    // 开始读(开读中断)

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

}


void uart_begin_write(uint8_t* data, uint8_t len)

{

    // prepare send data

    USART_ITConfig(USART1, USART_IT_TC, DISABLE);


    // 初始化写缓冲(复制待写数据等)

    memcpy(writ_buffer, data, len);

    writ_idx = 0;

    writ_len = len;


    // 开始写(开写中断)

    USART_ITConfig(USART1, USART_IT_TC, ENABLE);


    return;

}


中断处理


// 写中断处理

INTERRUPT_HANDLER(USART1_TX_TIM5_UPD_OVF_TRG_BRK_IRQHandler, 27)

{

    // 发送1字节

    USART_SendData8(USART1, writ_buffer[writ_idx++]);

    USART_ClearITPendingBit(USART1, USART_IT_TC);


    // 等待缓冲数据全部写出后,关写中断

    if( writ_idx == writ_len ) {

        USART_ITConfig(USART1, USART_IT_TC, DISABLE);

        // 你的处理

    }

}


// 读中断处理

INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler, 28)

{

    uint8_t temp = 0;


    // 读1字节,存入读缓区

    temp = USART_ReceiveData8(USART1);

    read_buffer[read_idx++] = temp;


    // 等待全部读完后(如果有设定读长度的话)关读中断

    // 这里根据具体业务,可以不关中断一直接受数据

    if( read_idx == read_len ) {

        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);

    }

}



上面示例是异步读写,加一个状态等待的循环判断,可改为同步读写。

推荐阅读

史海拾趣

ADATA公司的发展小趣事

ADATA科技成立于2001年,是一家专注于提供存储解决方案的公司,以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: ADATA科技成立于2001年,总部位于台湾新北市,最初致力于生产和销售DRAM模块。随着存储技术的不断发展,公司逐渐扩展了业务范围,涵盖了闪存产品、固态硬盘、移动存储设备等多个领域。

  2. 技术创新与产品推出: ADATA科技在存储领域进行了持续的技术创新,并推出了一系列具有竞争力的产品。公司不断提升产品性能、降低成本,并注重产品的设计和用户体验。除了传统的DRAM模块,公司还推出了闪存卡、固态硬盘、移动硬盘等产品,满足了不同客户和市场的需求。

  3. 市场拓展与国际化发展: ADATA科技积极拓展国内外市场,并逐步实现了国际化发展。公司产品远销全球各地,与全球范围内的主要零售商、电子产品制造商建立了合作关系。通过与合作伙伴的紧密合作,公司产品在国际市场上得到了广泛认可和好评。

  4. 品牌建设与市场影响力: ADATA科技通过持续的品牌建设活动,不断提升了在存储领域的市场影响力。公司参加各类行业展会、展示活动,并投入大量资源进行市场推广和宣传。同时,公司还与体育、文化等领域开展赞助活动,提升品牌知名度和美誉度。

  5. 未来展望与持续发展: 作为一家专注于存储解决方案的企业,ADATA科技将继续致力于技术创新和产品开发。公司将不断改进现有产品,推出更多性能更好、功能更丰富的存储产品,以满足不断变化的市场需求。同时,公司还将继续拓展国际市场,加强与合作伙伴的合作,实现业务的持续增长和发展。

EOS POWER INDIA Pvt公司的发展小趣事

EOS POWER INDIA Pvt公司成立于1991年,由美国加利福尼亚州几位电力电子领域的先驱创立。成立之初,EOS就致力于电力电子技术的研发与应用,特别是在电源解决方案方面。通过引进先进的技术和工艺,EOS在印度市场上逐步建立起自己的品牌形象,并开始为本地客户提供优质的电源产品和服务。

GE Oil & Gas Digital Solutions公司的发展小趣事
检查电容和电阻元件是否有损坏或老化现象,检查电路布局是否合理以避免电磁干扰。
Euroquartz公司的发展小趣事

Euroquartz在技术创新方面始终保持领先地位。公司推出的新款超薄MEMS滤波器系列产品,就是其技术实力的最好体现。这些滤波器在制造过程中,对互调失真及相位和振幅匹配等特性进行了优化,提供了从音频到3GHz的宽泛可选频率范围,最大功率可达200W。这些创新产品不仅满足了市场的需求,也进一步巩固了Euroquartz在电子元器件行业的领先地位。

Alutronic Kuhlkorper Gmbh & Co Kg公司的发展小趣事

Euroquartz自创立之初,就将产品质量和客户满意度置于公司运营的核心。为了确保这一点,公司引入了完整的AS9100 Rev D质量体系,并通过了相应的认证。这一体系要求Euroquartz在制造程序和可追溯性方面保持完整的记录,审批机关会定期进行审核,确保品质始终如一。这种对品质的执着追求,为Euroquartz赢得了客户的信赖,也为公司的发展奠定了坚实的基础。

Gigabit Logic Inc公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。

问答坊 | AI 解惑

借人气问问如何连接两个GPRS模块?

最近我使用IWOW的TR800来做一个无线数传的项目,我在想移动既然分配给模块的ip是内网ip,那是否意味着两个模块连上GPRS网络之后,他们都是获得同一内网里的ip,就像连接到同一路由器里面的两台机器一样? 另外共享一下我觉得不错的技术QQ群 群5 ...…

查看全部问答>

嵌入式

嵌入式系统的好资料…

查看全部问答>

【藏书阁】电路分析 (面向21世纪课程教材)

目录: 第一章 线性电路的复数解法 1.1 电源与元件的概念 1.2 常参量线性电路的复数解法 1.3 一阶RC滤波器 1.4 二级LC滤波器 思考题 习题 第二章 线性电路的s域解法 2.1 拉普拉斯变换 2.2 线性电路的s域解法 2.3 卷积 附录2 拉氏变换 ...…

查看全部问答>

通过MR16谈谈自己对LED行业的想法--antsin

本人一直在一家电源IC原厂华东区做FAE,07年公司从linear挖了一个团队进入LED驱动行业,我随之也开始进入这个行业。在勤勤勉勉的耕耘3年中,我从学习到与客户分享我的学习经验,很多客户都会跟我讲,王工,从你身上我学到了很多。但这时我告诫自己 ...…

查看全部问答>

小弟新学TMS320LF2407,请教一下加载程序的问题

原来用的6416的片子,现在用的2407,想问下怎么能一上电就让dsp芯片运行我的程序?小弟新手希望各位大侠教的详细点,有资料发我邮箱也可以hljlishen0517@gmail.com   多谢各位了…

查看全部问答>

请高手帮忙调试一块板子(报酬1.5w)

主板芯片: Intel 6700 PXH 64 bit PCI Express to PCI-X Hub,CPU是INTEL的 Sossaman。 现在就是没有仿真到芯片组,另外,因为没有Super I/O芯片,CPLD时序设置也有点不太清楚。 请高手帮忙调试出来。 我的msn:dq_lu@hotmail.com …

查看全部问答>

如何设置vxworks(主机)的IP地址,和网关?如果设置成功,我能否在windows下 用ping 命令对运行中的vxworks进行网络连接??能ping通吗

如何设置vxworks(主机)的IP地址,和网关????????? 如果设置成功,我能否在windows下 用ping 命令对运行中的vxworks进行网络连接??能ping通吗?? …

查看全部问答>

【MSP430共享】MSP430 电容单触式传感器设计指南

MSP430 电容单触式传感器设计指南,这是官网应用手册,很权威的。 [ 本帖最后由 鑫海宝贝 于 2011-10-12 09:35 编辑 ]…

查看全部问答>

LCD液晶显示

LCD1604驱动模块 /*备注一:LCD1604只含有ASCII码表内字符的字库,无汉字字库,不能自行打点,不便画曲线*/ /*本模板功能一:在任意位置显示阿拉伯数字 */ /*本模板功能二:在任意位置显示字符及字符串 */ #include #include \"lcd1604.h\" /* ...…

查看全部问答>

TA 输出模式 疑问

输出信号由OUTx位决定,可我没在寄存器里找到它…

查看全部问答>