历史上的今天
今天是:2024年11月28日(星期四)
2019年11月28日 | STM8S103之串口查询发送+中断发送
2019-11-28 来源:eefocus
本文以STM8S103F3P6编程为例,介绍STM8S103F3P6串口中断发送。
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM8S103F3P6
1.系统时钟初始化为内部16M
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //时钟 初始化时钟为1分频 16M 2分频8M
2.初始化串口
void Init_UART1(void)
{
UART1_DeInit(); //恢复串口所有寄存器
UART1_Init((u32)9600, //波特率9600
UART1_WORDLENGTH_8D, //8位
UART1_STOPBITS_1, //停止位1
UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE,
UART1_MODE_TXRX_ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //使能接收中断
// UART1_ITConfig(UART1_IT_TC, ENABLE); //使能发送中断 发送中断使能是那里需要才使能
UART1_Cmd(ENABLE);
}
3.编写查询方式发送数据入口
void UART1_Send(uint8_t *dat,uint8_t len)
{
uint8_t i = 0;
for(i=0; i while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)); UART1_SendData8(*dat++); } } 4.编写中断方式发送数据入口 uint8_t Rxd_buf[20]; //接收数组 uint8_t Rxd_len; //接收长度 uint8_t Rxd_F; //接收标志位 uint8_t Txd_buf[20]; //发送数组 uint8_t Txd_len; //发送长度 uint8_t Txd_F; //发送标志位 void Send(uint8_t dat) { while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)); UART1_SendData8(dat); } uint8_t Set_UART1Interrupt(uint8_t *lV_dat,uint8_t lV_len) { if(Txd_len != 0) { return FALSE; } for(Txd_len=0;Txd_len UART1_ITConfig(UART1_IT_TC, ENABLE); //使能发送中断 return TRUE; } 5.编写主函 void main(void) { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //内部时钟16M Init_UART1(); enableInterrupts(); UART1_Send("Hin",3); //查询发送 Set_UART1Interrupt("Hellon",6); //中断发送数据 while(1); } 6.编写中断服务函数 INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17) { static uint8_t lV_num; //记录已经发送数据的长度 Send(Txd_buf[lV_num++]); if(lV_num == Txd_len) //发送数据的长度和需要发送数据的长度相等 就关闭发送中断 { lV_num = 0; (void) memset(Txd_buf,0,Txd_len); Txd_len = 0; UART1_ITConfig(UART1_IT_TC, DISABLE); //禁止发送中断 } return; }
史海拾趣
|
作为一种基于普通电话双绞线的传输技术,ADSL对物理传输线路有很大的依赖性。环路的特征将对ADSL服务的质量和性能级别产生决定性影响。首先在业务开通时会遇到如何选择ADSL线路,某条线路能否开通ADSL业务,可以开通的速率是多少,影响传输质量的原 ...… 查看全部问答> |
|
RTL8309的资料好少,我在网络上有找到通过SMI接口协议来操作寄存器的,能通过主芯片和8309之间的I2C来进行通信,然后控制寄存器吗?… 查看全部问答> |
|
我两台机器的网卡都是百兆网卡,测速软件报告网速最高只有 26 Mbps,为什么呢? 我两台机器的网卡都是百兆网卡,我用测试软件测试了一下网速,能达到 26 Mbps,离 100 Mbps 还有很远呢!这是为什么呢? 我用的是直连网线。 我很关心 怎样能让测试结果非常接近 100 Mbps ? … 查看全部问答> |
|
在config.bib中把CE镜像划分为了4个部分,例如: KERNEL.BIN,DRIVER.BIN,APP.BIN,NK.BIN 这样做以便后期对单个镜像文件升级,现在问题来了,每个BIN文件中的DLL在SLOT0,SLOT1中所占用的地址空间都是在编译器时计算好的。如果后面我的APP.BIN变化 ...… 查看全部问答> |
|
很多价格昂贵的无铅焊台都喜欢强调和炫耀瞬间强大的温度恢复能力,其实这个有一些钻牛角尖的做法,虽然性能是上去了,但焊台本身的总体制造成本以及使用成本也跟着抬高,势必转嫁到最终用户身上。 &nb ...… 查看全部问答> |
|
本来打算用2013做16位AD,然后将数据用SPI传送给149的,做的时候才发现,2013的资料实在是太少了,特别是中文资料,反复看了例程,网上的,TI的,到现在还没有能通讯上,哎,2013这个东东怎么看都和先前的片子不一样,149,133资料多,好用,看来2xxx的麻烦死了. ...… 查看全部问答> |




