STM32 HAL: таймер не стартует после программирования через CUBE
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 967
Всего пару вещей нужно добавить ( например, в main.c):
1. Определить коллбэк
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim16)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);
}
}
2. Вызвать
// __HAL_TIM_ENABLE_IT(&htim16, TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&htim16);
VBA - скрипт для MS Excel - ищем текст во всех файлах внутри папки
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование
- Просмотров: 768
Attribute VB_Name = "search_in_files"
Public Sub SearchFolders()
Dim fso As Object
Dim fld As Object
Dim strSearch As String
Dim strPath As String
Dim strFile As String
Dim wOut As Worksheet
Dim wbk As Workbook
Dim wks As Worksheet
Dim lRow As Long
Dim rFound As Range
Dim strFirstAddress As String
On Error GoTo ErrHandler
Application.ScreenUpdating = False
'Change as desired
strPath = "C:\Components" 'write your folder path here
strSearch = InputBox("String to search:", "Search a string", "")
If strSearch = "" Then
Exit Sub
End If
Set wOut = Worksheets.Add
lRow = 1
With wOut
.Cells(lRow, 1) = "Workbook"
.Cells(lRow, 2) = "Worksheet"
.Cells(lRow, 3) = "Cell"
.Cells(lRow, 4) = "Text in Cell"
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(strPath)
strFile = Dir(strPath & "\*.xls*")
Do While strFile <> ""
Set wbk = Workbooks.Open _
(Filename:=strPath & "\" & strFile, _
UpdateLinks:=0, _
ReadOnly:=True, _
AddToMRU:=False)
For Each wks In wbk.Worksheets
Set rFound = wks.UsedRange.Find(strSearch)
If Not rFound Is Nothing Then
strFirstAddress = rFound.Address
End If
Do
If rFound Is Nothing Then
Exit Do
Else
lRow = lRow + 1
.Cells(lRow, 1) = wbk.Name
.Cells(lRow, 2) = wks.Name
.Cells(lRow, 3) = rFound.Address
.Cells(lRow, 4) = rFound.Value
End If
Set rFound = wks.Cells.FindNext(After:=rFound)
Loop While strFirstAddress <> rFound.Address
Next
wbk.Close (False)
strFile = Dir
Loop
.Columns("A:D").EntireColumn.AutoFit
End With
MsgBox "Done"
ExitHandler:
Set wOut = Nothing
Set wks = Nothing
Set wbk = Nothing
Set fld = Nothing
Set fso = Nothing
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description, vbExclamation
Resume ExitHandler
End Sub
Создаём приложения с красочным и управляемым интерфейсом в Visual Studio Code
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование
- Просмотров: 1619
Итак нам понадобится:
1. Установленная
2. Уcтановленные необходимые
Приступаем
1. Переходим в Visual Studio и устанавливаем расширения для поддержки C#: C# Dev Kit, vscode-runner, .NET Meteor
2. Создаём и открываем папку и создаём новое windows forms приложение, написав в терминале: dotnet new winforms
3. Открываем Form1.Designer.cs и добавляем в класс Form1
private System.Windows.Forms.WebBrowser webBrowser1;
4. В методе InitializeComponent:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450); // первичный размер основной формы
this.Text = "Form1";
this.webBrowser1.Name = "webBrowser1"; //инициализируем обьект браузера
this.webBrowser1.ScrollBarsEnabled = false;
this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted);
this.webBrowser1.AllowWebBrowserDrop = false;
this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
this.webBrowser1.WebBrowserShortcutsEnabled = false;
this.webBrowser1.ObjectForScripting = this;
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/title.html", curDir)); //адрес странички нашего интерфейса
this.ResizeEnd += new EventHandler(Form1_ResizeEnd); //при изменении размера изменяем и размер контрола "браузера"
this.Controls.Add(this.webBrowser1);
this.ResumeLayout(false);
this.PerformLayout();
}
5. Добавляем методы - обработчики событий (Events):
private void WebBrowser1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
}
private void Form1_ResizeEnd(object sender, System.EventArgs e)
{
this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
}
Полный код модуля:
namespace AIR_MASTER_CONTROL;
partial class Form1
{
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.WebBrowser webBrowser1;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void WebBrowser1DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
}
private void Form1_ResizeEnd(object sender, System.EventArgs e)
{
Control control = (Control)sender;
this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
this.webBrowser1.Name = "webBrowser1";
this.webBrowser1.ScrollBarsEnabled = false;
this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted);
this.webBrowser1.AllowWebBrowserDrop = false;
this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
this.webBrowser1.WebBrowserShortcutsEnabled = false;
this.webBrowser1.ObjectForScripting = this;
this.ResizeEnd += new EventHandler(Form1_ResizeEnd);
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/index.html", curDir));
this.Controls.Add(this.webBrowser1);
this.ResumeLayout(false);
this.PerformLayout();
}
}
6. В папке со скомпилированным бинарником создаём папку interface, а внутри неё файл index.html
7. Мы можем вызывать функции JavaScript (находящиеся в файле /interface/index.html) из нашей C# программы, например, следующим образом:
SetValuesToHTML(webBrowser1.Document, ref ValuesOfSource); // передаём ссылку на массив чисел типа float
public Int16 SetValuesToHTML(System.Windows.Forms.HtmlDocument document, ref float[] ValuesOfSource)
{
Object[] objArray = new Object[3];
for (int i = 0; i < 3; i++)
objArray[i] = (Object)(ValuesOfSource[i]);
document.InvokeScript("SetValuesToHTML", objArray); // функция, принимающая массив чисел типа (в JavaScript)
return 0;
}
На стороне JavaScript принимающий метод:
function SetValuesToHTML(current, voltage, temperature){
document.all['Current'].value = current;
document.all['Voltage'].value = voltage;
document.all['Temperature'].value = temperature;
}
8. Мы можем вызывать функции(методы) С# из JavaScript следующим образом:
window.external.SendSettingsCOM(document.all['number'].value);На стороне C# вызываемый метод - внутри класса Form1:
public void SendSettingsCOM (int ExtraParam){ // transfer settings to COM-port
byte[] data = { 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00};
if (ExtraParam < 0)
data[1] = 0x00;
else
if(ExtraParam != 0 )
data[1] = 0x01;
data[2] = (byte)((ExtraParam < 0) ? -ExtraParam : ExtraParam);
if(MyPort != null)
MyPort.Write(data, 0, data.Length);
}
Турбины Фибоначчи
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Моделирование
- Просмотров: 804
Maker Faire Brno
Страница 7 из 193
