#必须注意:openocd -f /usr/share/openocd/scripts/誉耐春interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f0x_stlink.cfg -c init -c halt
# 不能用reset,必须是halt
#芯片复位
echo reset halt | nc localhost 4444
#开PA clk
echo mww 0x40021014 0x20014 | nc localhost 4444
#开串口时钟
echo mww 0x40021018 0x4000 | nc localhost 4444
#PA辅助功能, 高28是swio, swclk接口的亩轮辅助功能,而剩下两个是pa9/10的TXRX功能辅助。
#echo mww 0x48000000 0x28240000 | nc localhost 4444
echo mww 0x48000000 0x28280000 | nc localhost 4444
#将PA9,PA10设置成AF1
echo mww 0x48000024 0x110 | nc localhost 4444
#reset串口
echo mww 0x4002100c 0x4000 | nc localhost 4444
echo mww 0x4002100c 0x0 | nc localhost 4444
#set baud 115200
echo mww 0x4001380c 0x45 | nc localhost 4444
#read status
echo mdw 0x4001381c 1 | nc localhost 4444
# 收发使能
echo mww 0x40013800 0xd | nc localhost 4444
#read status
echo mdw 0x4001381c 1 | nc localhost 4444
# send 发
echo mww 0x40013828 0x5a | nc localhost 4444
#读取状态
echo mdw 0x4001381c 1 | nc localhost 4444
#再发再看
echo mww 0x40013828 0xb4 | nc localhost 4444
echo mdw 0x4001381c 1 | nc localhost 4444
#读TXDR,确认是0xb4即最后一次发的功能
echo mdw 0x40013828 1 | nc localhost 4444
#PC一发,读庆耐取RXDR,就看到了:
#echo mdw 0x40013824 1 | nc localhost 4444
z@z-ThinkPad-X61:~/zworkingCopy/mcu/F030$
z@z-ThinkPad-X61:~/zworkingCopy/mcu/F030$
z@z-ThinkPad-X61:~/zworkingCopy/mcu/F030$ cat simplest_uart_PCsend_RxRead.cmd
# 必须先跑,另一个脚本,才能跑这个:
seq 9 | xargs -i bash -c "echo {}echo -n {} | nc localhost 4161 echo mdw 0x40013824 1 | nc localhost 4444"
我用颤码贺的新唐芯片,8051内核,跟51差不多,望采纳茄派void UART_Initial (void)
{
P02_Quasi_Mode //Setting UART pin as Quasi mode for transmit
P16_Quasi_Mode //Setting UART pin as Quasi mode for transmit
SCON_1 = 0x50 //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x08 //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK
RH3= HIBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */
RL3= LOBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */
set_TR3//Trigger Timer3
}
以上是初始化的
void Send_Data_To_UART1(UINT8 c)
{
TI_1 = 0
SBUF_1 = c
while(TI_1==0)
}
这个是发送模世
void UART_isr (void) interrupt 4 //串行中断服务程序
{
if (RI_1==1)
{ /* if reception occur */
clr_RI_1/* clear reception flag for next reception */
Receive_Date[c] = SBUF_1
if (Receive_Date[0] == First_Date)
{
c++
}
else if(Receive_Date_Size >0 &&Receive_Date_Size <4)
{
c++
}
else if(Receive_Date[c] == Last_Date &&Receive_Date_Size ==4)
{
c = 0
Flag_Receive_One = 1
}
else
{
c = 0
}
}
}
接收
#include <reg51.h>
#include <intrins.h>
unsigned char key_s, key_v, tmp
char code str[] = "welcome! www.willar.com \n\r"
void send_str()
bit scan_key()
void proc_key()
void delayms(unsigned char ms)
void send_char(unsigned char txd)
sbit K1 = P1^4
main()
{
TMOD = 0x20// 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD// 波特率9600
TL1 = 0xFD
SCON = 0x50// 设定串行口工作方式
PCON &= 0xef// 波特率不倍增
TR1 = 1// 启动定时器1
IE = 0x0// 禁止任何中断
while(1)
{
if(scan_key()) // 扫描按键
{
delayms(10)// 延时去抖动
if(scan_key()) // 再次扫描
{
key_v = key_s// 保存键值
proc_key()// 键处理
}
}
if(RI) // 是否有数据到来
{
RI = 0
tmp = SBUF// 暂存接收到的数据
P0 = tmp// 数据传送到P0口
send_char(tmp)// 回传接收到的数据
}
}
}
bit scan_key()
// 扫描按键
{
key_s = 0x00
key_s |= K1
return(key_s ^ key_v)
}
void proc_key()
// 键处理
{
if((key_v &0x01) == 0)
{ // K1按下
send_str()// 传送字串"welcome!...
}
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd
while(!TI)// 等特数据传送
TI = 0// 清除数据传送标志
}
void send_str()
// 传送字串
{
unsigned char i = 0
while(str[i] != '\0')
{
SBUF = str[i]
while(!TI)// 等特数据传送
TI = 0// 清除数据传送标志
i++// 下一个字符
}
}
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i
while(ms--)
{
for(i = 0i <120i++)
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多简激则低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为铅宴了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标拦棚准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)