历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2019年01月07日 | STM8L USART串口使用

2019-01-07 来源:eefocus

USART串口使用


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);

    }

}


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


推荐阅读

史海拾趣

Diodes Incorporated公司的发展小趣事

值得一提的是,Diodes Incorporated还荣获了亚洲金选奖殊荣。公司的超高功率密度(UHPD)充电器解决方案在亚洲金选奖中获得了金选节能系统功率半导体供货商项目公司奖。这一奖项的获得,不仅彰显了公司在节能系统功率半导体产品领域的领先地位,也进一步提升了公司的品牌形象和市场竞争力。

以上五个故事概述了Diodes Incorporated公司在电子行业中发展起来的相关事实。通过这些故事,我们可以看到公司在技术创新、市场拓展、财务表现以及品牌建设等方面所取得的成就和进步。

ANOVA公司的发展小趣事

ANOVA深知,成功的关键在于与合作伙伴的紧密合作。因此,公司始终与客户保持紧密的合作关系,共同开发特定的解决方案,协助制定部署策略。ANOVA的服务团队以客户的需求为导向,以十几种语言提供个性化的服务,确保每一位客户都能得到满意的解决方案。此外,ANOVA还积极与商业伙伴合作,共同开拓市场,实现共赢。

GISMA Steckverbinder GmbH公司的发展小趣事

GISMA深知产品质量对于企业生存和发展的重要性。因此,公司建立了完善的质量管理体系,并通过了DIN ISO 9001(DNV)等国际质量认证。这一认证不仅证明了GISMA在产品生产过程中的严格质量控制能力,也为其赢得了更多客户的信任和认可。GISMA始终坚持质量第一的原则,不断提升产品质量和服务水平,确保每一款产品都能达到客户的期望和要求。通过持续的质量管理和改进活动,GISMA在电子行业中树立了良好的品牌形象和口碑。

Gulf Semiconductor公司的发展小趣事

随着全球电子市场的不断扩大,GISMA积极实施国际化战略,努力拓展海外市场。公司不仅在欧洲市场建立了稳固的地位,还逐步将业务拓展到亚洲、北美等地区。通过参加国际展会、建立海外销售网络等方式,GISMA成功吸引了众多国际客户的关注,进一步提升了品牌知名度和市场占有率。同时,GISMA还积极寻求与国际知名企业的合作机会,共同推动电子行业的发展。

Appointech Inc公司的发展小趣事

Appointech Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

CBM_America_Corporation公司的发展小趣事

CBM_America_Corporation在电子行业的初期,专注于研发具有创新性的半导体技术。通过不懈的努力,公司成功开发出一种高效能、低能耗的芯片,受到了市场的广泛欢迎。这一技术突破为公司带来了大量的订单,也吸引了众多投资者的关注。随着资金的注入,CBM开始扩大生产规模,并进军国际市场,逐步成为了电子行业的领军企业。

问答坊 | AI 解惑

arm Linux中的IPv6协议怎么用起来?

两块板子,一块单片机板子,一块ARM9板子。单片机板子上没有操作系统,ARM9板子上加载了Linux操作系统。 一方面,在ARM9板子上,需要把单片机板子通过无线传送过来的IPv6包解析,并最终把包中应用层的数据传给PC机服务器;另一方面,ARM9板子要接 ...…

查看全部问答>

DDK6001安装不了,总是提示 Remove: EULA

DDK6001安装不了,总是提示 Remove: EULA,好像是说有有不需要的一个组件已经安装,必须把它先卸载了,但是按提示操作了无数次,还是装不了,是怎么回事呢,谢谢…

查看全部问答>

有关流接口驱动程序的问题

最近调试流接口驱动程序出了些问题,麻烦论坛里的牛牛们指教,问题描述如下: 三星2440平台,wince5.0,调试ADC的流接口驱动程序,我只为了测试所以很多功能都简化了,就是往寄存器里写一次,直接读回,用了virtualalloc和virtualcopy函数映射地址 ...…

查看全部问答>

WinCE中OPENFILENAME,GetOpenFileName的使用

我在VS2005下OS Design,SDK,使用GetOpenFile出错,不知道在WinCE下到底能不能用它们?如果能,怎么用?我这样用行吗? 但出错!                  OPENFILENAMEEX  ofn; ...…

查看全部问答>

FPGA板子哪家的板子比较好

本人想买FPGA板子,不知道哪家提供的板子和服务比较好,请大家帮忙说说啊!…

查看全部问答>

菜鸟求助

我在DEC6713开发板的基础进行设计了一块板子,准备做语音识别方面的开发,可是在电路板全部焊好上电调试时,CCS无法启动,老是出现 “Can\\\'t Initialize Target CPU; Error 0x80000200/-1031 Fatal Error during:OCS, Device driverroblem wit ...…

查看全部问答>

51单片机开发板 原理图 集合下载

51单片机开发板 原理图 集合下载 ,欢迎下载学习 [ 本帖最后由 y789 于 2012-5-14 15:33 编辑 ]…

查看全部问答>

谁做过超声波发射电路,用的是升压中周,有谁做过吗。。帮忙指点一下电路

不知道他的工作原理(中周不了解)按着焊好,又不行。。急死了…

查看全部问答>

[转]降低 SAR ADC 驱动器的放大器功耗

    由于 SAR ADC 的功耗随着每一代新器件的推出而不断降低,放大器成了功耗敏感型应用的制约因素。那么我们如何才能进一步降低功耗?在寻找可能的解决方案之前,让我们先考虑一下 ADC 功耗降低的原因。下图 1 直接显示了我们 12 位、4MS ...…

查看全部问答>

职场新人的困惑

职场新人的困惑 小弟刚刚毕业不久,现在做着所谓的硬件研发的工作 在工作中,经常的遇到一些难题 想找同事请教呢 可一个个都忙得很,要么爱理不理的,要么索性来个不知道 唉,痛苦呀 感觉职场的同事之间的关系,与校园中同学之间、师生之间的 ...…

查看全部问答>