// 主循环里没有程序需要执行
while(1);
}
这里着重要说明的一点是 PD7 的外部中断程序。看了一下芯片手册,PD
口外部中断 EXTI3 的中断向量号是 6,想当然,又是想当然,按 IAR 的规矩中
断向量要加 2,就这样写#pragma vector=0x08,结果就是按下按键,程序没响
应了,一直在中断里不出来。接下来只能另想办法,仔细翻了资料后发现,
PD7 和 PD 其他端口不一样,PD7 后面拖了个小尾巴 TLI,再看手册上的 TLI 描
述,乖乖,TLI 拥有芯片最高级别中断,享有独立专用的中断向量号 0,这下就
好办了,按 IAR 的规矩,向量号加 2,程序改成#pragma vector=0x02,重新来
一遍编译、下载、运行,按键终于听话了。
IAR+STM8——UART 串口发送与中断接收
2013-03-21 23:22:34|分类:STM8|举报|字号订阅
STM8 的 UART 功能强大,除了常规的串口异步通讯外,还拥有 LIN 主模
式、红外编解码器、智能卡模拟等功能。新手还是从基本的串口通讯入手,那
些高级功能等熟练以后再慢慢研究吧。
#i nclude <iostm8s207sb.h>
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M 内部 RC 经 2 分频后系统时钟为 8M
}
void UART3_init(void)
{
UART3_BRR2 = 0x01; // 设置波特率 9600
UART3_BRR1 = 0x34; // 8M/9600 = 0x341
UART3_CR2 = 0x2C; // 允许接收中断,允许接收,允许发送
}
#pragma vector=UART3_R_RXNE_vector
__interrupt void UART3_RX_RXNE(void)
{
unsigned char c;
c = UART3_DR; // 接收到数据了
while(!UART3_SR_TXE);
c++; // 把接收到的数据加 1
UART3_DR = c; // 再发回去,为什么这么做?在电脑上串口调试软件里发 1 就
评论1
最新资源