Ⅰ 求指導,用電腦做上位機,利用串口怎麼實現對STM32各個引腳的控制
通過電腦連接stm32的usart外設,通過你自己定義的通訊協議,在usart接收中斷中編寫中斷處理程序,比如收到 GPIOA1就改變這個io的功能什麼的。主要看你電腦和stm32的通訊協議怎麼編寫了。
Ⅱ 求教,下位機(基於stm32)能否實現上位機的部分功能
就 stm32 而言,處理速度是夠用了,只是RAM太小,裝不了多少文本的,如果用FSMC擴展一下RAM應該夠了。
還有就是軟體,目前好像沒有什麼可供stm32運行的文本編輯器程序,你可能需要移植一個,最簡單的是以前PC機的DOS系統下的文本編輯器,體積也不大。
Ⅲ STM32是否需要PC機編程用哪些軟體
必須要PC機編程啊,STM32自己可不能編譯程序!
用的軟體,一般就是keil MDK,最好的就是IAR for stm32,還有聽說不多的TASKING編譯器。
Ⅳ stm32如何接受到來自上位機的指令啊
串口通信,需要哪些數據傳輸,根據你設計的程序確定。比如程序中用到A,那麼你可以在上位機中改變,然後判斷A是否改變,如改變怎使用最新的值。
Ⅳ 給stm32做上位機,用什麼語言編程合適
支持較底層的語言都可以,像C#、C++、Delphi等。。。。。。甚至java。。。。。還要看是作什麼服務用的,最後才確定語言
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ⅵ 單片機使用的是stm32,將採集到的數據進行上位機顯示。對上位機小白,該使用什麼軟體來編寫
多數用VB寫的,也有用C++等其它編寫的。
Ⅶ 【上下位機通信】:下位機(STM32)通過網口(DM9000之類的.)向上位機PC發送數據。求上位機例子程序~
用socket 類 udp tcp 我這給你個 最簡單的例子 udp
伺服器端
ImportsSystem.Net.Sockets
ImportsSystem.Net
Molesocketsever
Submain()
startserver()
EndSub PrivateSubstartserver()
'創建伺服器端的socket
DimsServerAsNewSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)
DimmyipAsIPAddress
'制訂本地迴路的ip地址
myip=IPAddress.Parse("10.13.115.105")
'設置伺服器埠號
DimsServerepAsNewIPEndPoint(myip,2001)
'設置客戶端的埠號
DimclientepAsNewIPEndPoint(myip,2002)
'將埠與socket綁定
sServer.Bind(sServerep)
WhileTrue
Try
Dimbytes(100)AsByte
'等待客戶端的請求
sServer.ReceiveFrom(bytes,clientep)
DimstrAsString=System.Text.Encoding.ASCII.GetString(bytes)
'將字元轉化成大寫
str=str.ToUpper
bytes=System.Text.Encoding.ASCII.GetBytes(str)
'返回結果
sServer.SendTo(bytes,clientep)
CatcheAsSocketException
EndTry
EndWhile
EndSub
EndMole客戶端
界面 和程序
ImportsSystem.Net.Sockets
ImportsSystem.Net
PublicClassForm1
InheritsSystem.Windows.Forms.Form
PrivateSubbsend_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesbsend.Click
'創建客戶端的socket
DimcClientAsNewSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)
'指定本地迴路的ip地址
Dimmyip,myip1AsIPAddress
myip=IPAddress.Parse("10.13.115.105")
myip1=IPAddress.Parse("10.13.115.136")
'設置伺服器埠號
DimServerepAsNewIPEndPoint(myip1,2001)
'設置客戶端的埠號
DimclientepAsNewIPEndPoint(myip,2002)
'將埠與socket綁定
cClient.Bind(clientep)
Try
DimstrAsString=Textinput.Text
Dimbytes()AsByte=System.Text.Encoding.ASCII.GetBytes(str)
'向伺服器發出請求
cClient.SendTo(bytes,Serverep)
Dimbytes2(100)AsByte
'接受伺服器的響應結果
cClient.ReceiveFrom(bytes2,Serverep)
str=System.Text.Encoding.ASCII.GetString(bytes2)
'將結果顯示在文本框中
Textdisplay.Text=Textdisplay.Text&vbNewLine&str
CatcherAsSocketException
MsgBox(er.ToString)
EndTry
cClient.Close()
EndSub
EndClass
Ⅷ stm32怎麼通過printf發送數據到上位機
這個需要通過STM32的串口。
①如果你的上位機是電腦,那麼需要一個USB轉TTL,TTL端接STM32串口。
②編寫STM32串口驅動(這個很容易的,配置引腳和串口)
③通過標准庫的printf或自己編寫printf與串口驅動對接。
我以前做智能小車寫了一份串口驅動,你可以自己看然後改一下:
(或者可以用庫函數,網路很容易找到,我不太喜歡庫函數)
/*******************usart_asm.s*******************/
;****usart驅動,匯編版****
USART1 EQU 0X40013800
USART2 EQU 0x40004400
DROS EQU 0X04
SROS EQU 0X00
;介面聲明
EXPORT printChar
EXPORT printStr
EXPORT printNum
EXPORT SelectUsart
;介面聲明,END
;引用聲明
IMPORT Div_U32
;引用聲明,end
;數據區
AREA USART_ADDRESS,DATA,READWRITE
Cur_Usart DCD USART2 ;當前usart地址存儲,默認為usart2
Num_Buffer SPACE 12 ;定義10byte緩沖堆棧
;數據區,end
AREA USART_CODE,CODE,READONLY
;SelectUsart,選擇Usart,參數2:usart器件代號(1=usart1,非1=usart2)
SelectUsart
STMFD SP!,{R1,LR} ;入棧
LDR R1,=Cur_Usart ;讀入usart地址暫存器地址
CMP R0,#1
BNE U2
U1 LDR R0,=USART1
B SETSR
U2 LDR R0,=USART2
SETSR
STR R0,[R1]
LDMFD SP!,{R1,PC} ;出棧
;SelectUsart,end
;***printChar ,參數1:char
printChar
STMFD SP!,{R1-R2,LR} ;入棧
LDR R1,=Cur_Usart
LDR R1,[R1] ;載入Usart地址
CHR_WAIT
LDR R2,[R1,#SROS] ;讀狀態寄存器
TST R2,#0X80
BEQ CHR_WAIT ;等待上次傳輸完成
STRB R0,[R1,#DROS] ;寫入
LDMFD SP!,{R1-R2,PC} ;出棧
;***printChar ,end
;***printStr ,參數1:str
printStr
STMFD SP!,{R1-R3,LR} ;入棧
LDR R1,=Cur_Usart
LDR R1,[R1] ;載入Usart地址
SEND_STR
LDR R2,[R1,#SROS]
TST R2,#0X80
BEQ SEND_STR ;等待上次傳輸完成
LDRB R3,[R0],#1 ;將指針(R0)處字元讀入R3
STRB R3,[R1,#DROS];寫入
CMP R3,#0
BNE SEND_STR;循環直到結束符'