Да, я видел. Но не подхожу под условия заявленные там.Есть ветка посвящённая этому
Вопрос закрыл.C Attiny работает не стабильно, stm через раз читает правильно
Control register 1 (USART_CR1)
Bit 10 PCE: Parity control
0: Parity control disabled
1: Parity control enabled
Bit 9 PS: Parity selection
This bit selects the odd or even parity when the parity generation/detection is enabled (PCE
bit set). It is set and cleared by software. The parity will be selected after the current byte.
0: Even parity
1: Odd parity
USART1->CR1 |= USART_CR1_PCE;
USART1->CR1 &=~ USART_CR1_PS;
Биты UPM1 и UPM0 (USART Parity Mode) в регистре UCSRC отвечают за включение и тип контроля чётности:
//Если бит UMSEL сброшен в 0, то модуль работает в асинхронном режиме
//USBS Количество стопбитов. Если бит сброшен в 0, то передатчик посылает 1 стопбит,
//если установлен в 1, то 2 стопбита.
//UCPOL При работе в асинхронном режиме он должен быть сброшен в 0. USART Mode: Asynchronous
//UPM1 UPM0 - Управление схемой контроля четности - 0 0 Выключена
UCSRC &= ~((1 << UMSEL) | (1 << USBS) | (1 << UCPOL) | (1 << UPM1) | (1 << UPM0)); // Clear bit
// Настройка формата кадра:
// - Even parity (UPM1=1, UPM0=0)
// - 8 бит данных (UCSZ1=1, UCSZ0=1)
// - 1 стоп‑бит (USBS=0)
UCSRC |= (1 << UPM1); // Set bits
//Определение размера слова данных - 8 бит
UCSRC |= (1 << UCSZ1) | (1 << UCSZ0); // Set bits
UCSRA &= ~(1 << UCSZ2); // Clear bit
//enable clock access to GPIOA
RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
//Enable clock access to alternate function
RCC->APB2ENR|=RCC_APB2ENR_AFIOEN;
//Настраиваем порт в режим альтернативной функции
GPIOA->CRH &= ~(GPIO_CRH_MODE8_Msk | GPIO_CRH_CNF8_Msk); //Сбрасываем биты в ноль
GPIOA->CRH |= (0x03 << GPIO_CRH_MODE8_Pos) | (0x02 << GPIO_CRH_CNF8_Pos); //устанавливаем нужные биты
RCC->CFGR &= ~(RCC_CFGR_MCO_Msk); //Сначала устанавливаем все в ноль
//Настройка вывода тактового сигнала
//через MCO-пин
//sourse - источник тактирования
// 0 - отключено
// 4 - SYSCLK
// 5 - HSI
// 6 - HSE
// 7 - PLL/2
RCC->CFGR |= (6<<RCC_CFGR_MCO_Pos); //Устанавливаем источник тактирования


Нашел несколько статей - изучаю.Как используя MAX7219 вместо одного светодиода поставить четыре?
Не понятно, как вы собираетесь размещать "четыре на одно поле". Если поставить светодиоды в углах клеток (на пересечении линий), то задача сведется к управлению матрицей 9 x 9, что невозможно сделать на одной MAX7219, но можно или на двух MAX7219, Или на трех сдвиговых регистрах. Так же влияет, сколько одновременно клеток может быть подсвечено, какие используются светодиоды и т.д.Одного светодиода для подсветки поля доски не достаточно. Нужно четыре на одно поле.
cellX и cellY (от 0 до 7).(cellX, cellY), (cellX+1, cellY), (cellX, cellY+1), (cellX+1, cellY+1).for (int row = 0; row < 9; row++) {
// 1. Гасим всё
turnOffAllRows();
turnOffAllCols();
// 2. Проверяем, относится ли текущая строка к углам выбранной клетки
if (row == cellY || row == cellY + 1) {
// 3. Включаем нужные столбцы
turnOnCol(cellX);
turnOnCol(cellX + 1);
// 4. Включаем текущую строку
turnOnRow(row);
}
// 5. Задержка для мультиплексирования (около 2-3 мс на строку)
delayMicroseconds(2000);
}
Как то такНе понятно, как вы собираетесь размещать "четыре на одно поле".
Нет, клетки подсвечиваются под фигурами, итого одновременно может светится 32 клетки.В каждый момент времени подсвечивается не более одной клетки



void max7219_init() {
write_reg(DISPLAY_TEST_REG, 0);
write_reg(SCAN_LIMIT_REG, 7);
write_reg(DECODE_MODE_REG, 0);
write_reg(SHUTDOWN_REG, 1);
clear();
}

void max7219_init() {
write_reg(DISPLAY_TEST_REG, 0);
write_reg(SCAN_LIMIT_REG, 7);
write_reg(DECODE_MODE_REG, 0);
write_reg(INTENSITY_REG, 15);
write_reg(SHUTDOWN_REG, 1);
clear();
}

Как лучше все это собрать?




package com.example.touchChess;
import com.example.touchChess.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawView(this));
}
class DrawView extends View {
Paint paint;
Bitmap bitmap1,bitmap2;
public DrawView(Context context) {
super(context);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.board);
bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.peice);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
canvas.drawBitmap(bitmap1, 0, 0, paint);
canvas.drawBitmap(bitmap2, 25, 525, paint);
}
}
}


package com.example.touchChess;
import com.example.touchChess.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawView(this));
}
class DrawView extends View {
Paint paint;
Bitmap bitmap1,bitmap2;
Bitmap[] arrayOfBitmap = new Bitmap[12];
public DrawView(Context context) {
super(context);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//доска
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.board);
//фигуры
bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.peice);
/*
createBitmap(Bitmap source, int x, int y, int width, int height) - Returns an immutable bitmap from the specified subset of the source bitmap.
*/
for(int i = 0; i < 6; i++) {
//черные
arrayOfBitmap[i] = Bitmap.createBitmap(bitmap2, i*60,60,60, 60);
//белые
arrayOfBitmap[i+6] = Bitmap.createBitmap(bitmap2, i*60,0,60, 60);
}
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
//доска
canvas.drawBitmap(bitmap1, 0, 0, paint);
//пример начальной позиции
//король
canvas.drawBitmap(arrayOfBitmap[0], 266, 22, paint);
canvas.drawBitmap(arrayOfBitmap[6], 266, 442, paint);
//ферзь
canvas.drawBitmap(arrayOfBitmap[1], 206, 22, paint);
canvas.drawBitmap(arrayOfBitmap[7], 206, 442, paint);
//слон
canvas.drawBitmap(arrayOfBitmap[3], 326, 22, paint);
canvas.drawBitmap(arrayOfBitmap[3], 146, 22, paint);
canvas.drawBitmap(arrayOfBitmap[9], 326, 442, paint);
canvas.drawBitmap(arrayOfBitmap[9], 146, 442, paint);
//конь
canvas.drawBitmap(arrayOfBitmap[4], 386, 22, paint);
canvas.drawBitmap(arrayOfBitmap[4], 86, 22, paint);
canvas.drawBitmap(arrayOfBitmap[10], 386, 442, paint);
canvas.drawBitmap(arrayOfBitmap[10], 86, 442, paint);
//ладья
canvas.drawBitmap(arrayOfBitmap[2], 446, 22, paint);
canvas.drawBitmap(arrayOfBitmap[2], 26, 22, paint);
canvas.drawBitmap(arrayOfBitmap[8], 446, 442, paint);
canvas.drawBitmap(arrayOfBitmap[8], 26, 442, paint);
//пешки
for(int i = 0; i < 8; i++)
{
canvas.drawBitmap(arrayOfBitmap[5], 26+i*60, 82, paint);
canvas.drawBitmap(arrayOfBitmap[11], 26+i*60, 382, paint);
}
}
}
}



package com.example.touchChess;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.example.touchChess.R;
import org.apache.commons.net.telnet.TelnetInputListener;
import org.apache.commons.net.telnet.TelnetNotificationHandler;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.ArrayList;
public class MainActivity extends Activity implements TelnetInputListener{
private TelnetConnection mConnection;
private BufferedInputStream mInputBuffer;
private TextView mTextViewContent;
private ScrollView mScrollViewContent;
private String mServerPort;
private String mServerAddress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(new DrawView(this));
setContentView(R.layout.activity_main);
FrameLayout container = findViewById(R.id.boardContainer);
container.addView(new DrawView(this));
mServerPort = "8880";
mServerAddress = "192.168.4.1";
mInputBuffer = null;
mConnection = new TelnetConnection();
mConnection.getConnection().setReaderThread(true);
mConnection.getConnection().registerInputListener(this);
mScrollViewContent = (ScrollView)findViewById(R.id.scrollViewContent);
mTextViewContent = (TextView)findViewById(R.id.textViewContent);
}
public void telnetInputAvailable() {
if(mConnection.isConnected()) {
try {
while (mInputBuffer.available() > 0) {
final String s = Character.toString((char) mInputBuffer.read());
runOnUiThread(new Runnable() {
public void run() {
mTextViewContent.append(s);
}
});
}
mScrollViewContent.post(new Runnable() {
public void run() {
mScrollViewContent.fullScroll(View.FOCUS_DOWN);
}
});
}
catch (IOException e) {
}
}
}
class DrawView extends View {
Paint paint;
Bitmap bitmap1, bitmap2;
Bitmap[] arrayOfBitmap = new Bitmap[12];
public DrawView(Context context) {
super(context);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// доска
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.board);
// фигуры
bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.peice);
/*
createBitmap(Bitmap source, int x, int y, int width, int height) - Returns an immutable bitmap from the specified subset of the source bitmap.
*/
for (int i = 0; i < 6; i++) {
// черные
arrayOfBitmap[i] = Bitmap.createBitmap(bitmap2, i * 60, 60, 60, 60);
// белые
arrayOfBitmap[i + 6] = Bitmap.createBitmap(bitmap2, i * 60, 0, 60, 60);
}
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
// доска
canvas.drawBitmap(bitmap1, 0, 0, paint);
// пример начальной позиции
// король
canvas.drawBitmap(arrayOfBitmap[0], 266, 22, paint);
canvas.drawBitmap(arrayOfBitmap[6], 266, 442, paint);
// ферзь
canvas.drawBitmap(arrayOfBitmap[1], 206, 22, paint);
canvas.drawBitmap(arrayOfBitmap[7], 206, 442, paint);
// слон
canvas.drawBitmap(arrayOfBitmap[3], 326, 22, paint);
canvas.drawBitmap(arrayOfBitmap[3], 146, 22, paint);
canvas.drawBitmap(arrayOfBitmap[9], 326, 442, paint);
canvas.drawBitmap(arrayOfBitmap[9], 146, 442, paint);
// конь
canvas.drawBitmap(arrayOfBitmap[4], 386, 22, paint);
canvas.drawBitmap(arrayOfBitmap[4], 86, 22, paint);
canvas.drawBitmap(arrayOfBitmap[10], 386, 442, paint);
canvas.drawBitmap(arrayOfBitmap[10], 86, 442, paint);
// ладья
canvas.drawBitmap(arrayOfBitmap[2], 446, 22, paint);
canvas.drawBitmap(arrayOfBitmap[2], 26, 22, paint);
canvas.drawBitmap(arrayOfBitmap[8], 446, 442, paint);
canvas.drawBitmap(arrayOfBitmap[8], 26, 442, paint);
// пешки
for (int i = 0; i < 8; i++) {
canvas.drawBitmap(arrayOfBitmap[5], 26 + i * 60, 82, paint);
canvas.drawBitmap(arrayOfBitmap[11], 26 + i * 60, 382, paint);
}
}
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutActionBar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorUnder"
android:orientation="vertical">
<Button
android:id="@+id/buttonConnect"
android:text="@string/stringConnect"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:layout_above="@+id/editTextCommand"
style="@style/ConnectButton">
</Button>
</RelativeLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="@color/colorUnder">
<EditText
android:id="@+id/editTextCommand"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:hint="@string/stringCommand"
android:maxLines="1"
android:layout_weight=".45">
</EditText>
<Button
android:id="@+id/buttonSend"
android:text="@string/stringSend"
android:layout_width="100dp"
android:layout_marginTop="5dp"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<FrameLayout
android:id="@+id/boardContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<ScrollView
android:id="@+id/scrollViewContent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:background="@color/colorUnder"
android:layout_weight="1">
<TextView
android:id="@+id/textViewContent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="7dp"
android:background="@color/colorUnder"
android:textColorLink="@color/colorUnderBar"
android:textColor="@color/colorDark"
android:typeface="monospace"
android:text="@string/waiting_esp"/>
</ScrollView>
</LinearLayout>
<resources>
<string name="app_name">touchChess</string>
<string name="title_activity_main">MAIN_ACTIVITY</string>
<string name="stringCommand">Enter command here</string>
<string name="stringSend">SEND</string>
<string name="stringConnect">CONNECT</string>
<string name="waiting_esp">Ожидание данных от ESP8266...</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorGreen">#00ff00</color>
<color name="colorBlue">#0000ff</color>
<color name="colorWhite">#ffffff</color>
<color name="colorBlack">#000000</color>
<color name="colorDark">#111111</color>
<color name="colorDarkGray">#444444</color>
<color name="colorGray">#a0a0a0</color>
<color name="colorLiteGray">#e0e0e0</color>
<color name="colorDarkGreen">#007700</color>
<color name="colorHoloBlue">#ff33b5e5</color>
<color name="colorButtonBackground">#d6d7d7</color>
<color name="colorButtonText">#1c1c1c</color>
<color name="colorUnderBar">#009688</color>
<color name="colorUnder">#CAEAF9</color>
</resources>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="@android:style/Theme.Light" />
<style name="ConnectButton" parent="@android:style/Widget.Button">
<item name="android:gravity">center</item>
<item name="android:textColor">@color/colorWhite</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">normal</item>
<item name="android:background">@color/colorDark</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
</style>
</resources>