代码演示:
一、首先进行UART1初始化
/*USART1 config*/
void USART1_Init(void)
{
/*Uart1*/
UART1_CR1=0x00;
UART1_CR2=0x00;
UART1_CR3=0x00;
// 设置波特率,必须注意以下几点:
// (1) 必须先写BRR2
// (2) BRR1存放的是分频系数的第11位到第4位,
// (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
// 例如对于波特率位9600时,分频系数=2000000/9600=208
// 对应的十六进制数为00D0,BBR1=0D,BBR2=00
//例如对于波特率位9600时,没有分频 = 16000000/9600 = 1666
//对应的十六进制数为0682,BBR1=68,BBR2=02
UART1_BRR2=0x02;
UART1_BRR1=0x68;
UART1_CR2 = 0x2c; //接收,发送使能,开接收中断
}
注意的事项:波特率的设置方式,在UART1初始化中打开了接收,发送使能,但是只打开了接收中断,而发送中断打开在哪里呢?接下来往下看。
二、接收中断服务函数中的操作过程
//将收到的数据再发送出去
#pragma vector= UART1_R_RXNE_vector //0x14
__interrupt void UART1_R_RXNE_IRQHandler(void)
{
u8 data;
if(UART1_SR & 0x20) //收到数据该位置位
{
UART1_SR &= ~0x20; //清接收中断标志位
rs485_data = UART1_DR;
Rev_Slaver_PrePare(data);
}
}
这里采用的接收中断方式不是采用while()去等待接受标志位完成,而是采用接收一个数据就传递一个数据到需要处理的函数,有人可能会说在接收中断中不要去做太多的事情,其实不然,在对接收数据处理函数中其实是对接收到的数据进行存储并不像复杂的逻辑运算而担心中断触发太久。处理函数这边就不贴出来,本文主要的目的是将接收,发送中断的处理方式。
三、发送中断处理方式
void USART1_SendArray(uint8_t *data,uint8_t len)
{
for(uint8_t i = 0;i < len;i++)
{
Tx1Buffer[count1++] = *(data + i);
}
UART1_CR2 |= 0x80; //直接开启发送中断
}
#pragma vector= UART1_T_TC_vector //0x13
__interrupt void SYS_UART1_TX_IRQHandler(void)
{
if(UART1_SR & 0x80)
{
UART1_DR = Tx1Buffer[Tx1Counter++];
if(Tx1Counter == count1)
{
UART1_CR2 &= ~0x80; //关闭发送中断
}
}
}
需要发送的数据串调用USART1_SendArray();,将会触发中断发送服务函数进行发送,在这里说明一点,stm8s103f3这款芯片的发送中断服务函数与接收中断服务函数不是同一个,这与stm32系列的芯片不太一样,后者是发送和接收中断共用同一个串口中断服务函数,在中断向量表中可观察到不同。
在进入中断发送服务函数中后,将要发送的数据串依次装入UART1_DR,这里就不需要像接收中断服务函数中清标志位,这边是硬件自动清除。
上一篇:stm8s跳出中断程序c语言,STVD自动生成的stm8
下一篇:STM8S中断系统
推荐阅读
史海拾趣
在全球化的浪潮下,Eurohm Resistors公司积极拓展海外市场。公司深入分析了全球电子行业的发展趋势和市场需求,制定了详细的市场拓展计划。通过与当地合作伙伴的紧密合作,Eurohm Resistors成功打入了多个国家和地区的市场,实现了全球化布局。
随着技术的不断进步,Barnbrook意识到单一的电路板产品已经无法满足市场的多元化需求。于是,公司开始拓展产品线,逐步推出了包括服务器、存储设备以及网络设备在内的一系列电子产品。同时,Barnbrook也积极开拓国内外市场,通过参加国际电子展会、建立销售网络等方式,不断提升品牌知名度和市场份额。
在巩固了国内市场地位后,CalRamic Technologies开始将目光投向国际市场。公司积极参加各类国际电子元器件展览会,与多家国际知名企业建立了合作关系。通过与国际大厂的深入交流,公司不仅拓宽了销售渠道,还引进了国际先进的生产技术和管理经验,进一步提升了自身的竞争力。
为了支持公司的持续发展和业务扩张,Eureka成功完成了多轮融资。这些融资不仅为公司提供了充足的资金支持,也吸引了众多投资者的关注。借助这些资金,Eureka加大了在研发、生产、销售等方面的投入,进一步提升了公司的竞争力和市场地位。同时,公司也积极开展战略合作,与上下游企业建立了紧密的合作关系,共同推动产业链的发展。
尽管AVAGO公司在发展过程中取得了显著成就,但也面临着诸多挑战。随着全球半导体市场的竞争日益激烈,公司需要不断投入研发资金、加强人才培养、优化生产流程等方面来保持竞争优势。同时,公司还需要密切关注行业动态和市场需求变化,以便及时调整战略和产品线。在未来,AVAGO公司将继续致力于技术创新和市场拓展,为全球客户提供更优质的产品和服务。
以上五个故事仅是对AVAGO公司发展历程的简要描述,实际上公司在发展过程中还经历了许多其他重要事件和阶段。这些故事展示了AVAGO公司如何凭借技术实力、市场洞察力和战略眼光在电子行业中脱颖而出,并成为全球领先的半导体企业之一。
为了进一步扩大市场份额和提高竞争力,AVAGO公司开始积极寻求并购机会。通过一系列精心策划的并购交易,公司成功整合了多家在半导体行业具有影响力的企业,从而获得了更多的技术资源和市场份额。这些并购不仅增强了AVAGO公司的综合实力,还为其在全球范围内的业务拓展奠定了坚实基础。
这东西正使用中80块淘回来的二手货,上次看一位会员争论汽车功放不是升压的,现发图片上来大家看看! 这东西12V输入通过DC TO DC电路升压为双18V供功放部分使用,看上去功率也有几十W放在房间音量还可以! xinxin2001 跟的贴图参考 ...… 查看全部问答∨ |
|
刚接触嵌入式驱动设计,公司设计了一个板子,用了 PTD0/LCD0~PTD3/LCD3 作为COM0~COM3 而PTD4/LCD4~PTD15/LCD15 作为S0~S12 我照freescale的文档做了初始化,可是在板子上调试时,没有任何反应, 请高手指点是为什么? #define CONFIG_LCD ...… 查看全部问答∨ |
我以前开发的产品用的都是wince5.0,所以我电脑上装的软件是 :PB5.0+EVC4.0+VC6.0,现在要用wince6.0了,我的问题是:装 VS 2005会不会影响我以前的CE5.0的工程、BSP等,我还能用PB5.0吗?还能用EVC4.0、VC6.0吗?我是否需要将以前的软件卸掉?最 ...… 查看全部问答∨ |
我有下面这段程序,send()子程序单独工作的时候是正常的,但是加入到主程序中时就出现问题, 我的主程序是一个频率计。主要问题是频率计的数码管显示不正常,串口能输出数据,但是数据是错误的。 #include <AT89X52.H> unsigned char code d ...… 查看全部问答∨ |
公司这边接到一个项目,需要采用无线技术,测量空中物品的运动轨迹、范围等,例如高架线缆,受到风力的影响,造成不规则的各个方向的摆动,该项目需要测试出其运动的范围和运动轨迹。 有这方面测量经验的公司和个人都可以,请回帖或 ...… 查看全部问答∨ |